题目描述
一个长度为 n (n>0) 的序列中存在“有趣的跳跃”当且仅当相邻元素的差的绝对值经过排序后正好是从 1 到 (n−1)。例如,1 4 2 3 存在“有趣的跳跃”,因为差的绝对值分别为 3, 2, 1。当然,任何只包含单个元素的序列一定存在“有趣的跳跃”。你需要写一个程序判定给定序列是否存在“有趣的跳跃”。
输入描述
一行,第一个数是 n (0<n<3000),为序列长度。
接下来有 n 个整数,依次为序列中各元素,各元素的绝对值均不超过
1
0
9
10^9
109。
输出描述
一行,若该序列存在 “有趣的跳跃”,输出 Jolly,否则输出 Not jolly。
输入样例
4 1 4 2 3
输出样例
Jolly
#include <bits/stdc++.h>
using namespace std;
int a[3007], b[3007];
int main()
{
int n;
cin>>n;
for(int i = 0; i < n; i++) cin>>a[i];
int id = 0;
for(int i = 1; i < n; i++)
b[id++] = abs(a[i] - a[i-1]);
for(int i = 0; i < id; i++)
for(int j = i + 1; j < id; j++)
if(b[i] > b[j])
swap(b[i], b[j]);
bool ok = true;
for(int i = 0; i < id; i++)
if(b[i] != i + 1) ok = false;
if(ok) cout<<"Jolly";
else cout<<"Not jolly";
return 0;
}