1 4 2 3is a jolly jumper, because the absolutes differences are 3, 2, and 1 respectively. The definition implies that any sequence of a single integer is a jolly jumper. You are to write a program to determine whether or not each of a number of sequences is a jolly jumper.
Input
Each line of input contains an integer n <= 3000 followed by n integers representing the sequence.Output
For each line of input, generate a line of output saying "Jolly" or "Not jolly".Sample Input
4 1 4 2 3 5 1 4 2 -1 6
Sample Output
Jolly Not jolly
出處: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=979
這題的題意是說若有一n項的數列,相鄰兩個數的差的絕對值,包含了所有1~n-1的數字就是jolly,反之就是not jolly。我的作法是將相鄰兩數相減取絕對值後記在table裡,看有哪些數字有出現過,最後在從1跑到n-1檢查table看是不是每個數字都出現了,只要有任何一個數字沒有出現,這就不是jolly,若都出現了,就是jolly。
c++程式碼:
#include <iostream>
#include <map>
#include <vector>
#include <cstdlib>
using namespace std;
int main() {
int n;
while (cin >> n) {
map<int, bool> rem;
vector<int> seq;
bool isJolly = true;
for (int i=0; i<n; i++) {
int num;
cin >> num;
seq.push_back(num);
}
for (int i=1; i<seq.size(); i++)
rem[abs(seq[i]-seq[i-1])] = true;
for (int i=1; i<n; i++) {
if (!rem[i]) {
isJolly = false;
break;
}
}
if (isJolly)
cout << "Jolly\n";
else
cout << "Not jolly\n";
}
return 0;
}
沒有留言:
張貼留言