【题目链接】
【题目考点】
1. 散列存储
2. 求绝对值
求整数的绝对值: int abs(int a)
求浮点数的绝对值:double fabs(double a)
【解题思路】
n个元素相邻元素差值的绝对值排序后为1~n-1,即1~n-1中每个数字都仅出现过1次。
设布尔数组vis,vis[i]表示差值i出现过。遍历数组,求出相邻元素的差值的绝对值,并在vis数组中做标记。
遍历结束后,从下标1~n-1遍历访问vis数组
- 如果存在某个数字没出现过,那么不存在有趣的跳跃。
- 如果每个数字都出现了,那么存在有趣的跳跃
【题解代码】
解法1:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, a[3005];;
bool vis[3005] = {};//vis[i]:数字i是否出现过 初始化为false
cin >> n;
for(int i = 1; i <= n; ++i)
cin >> a[i];
for(int i = 2; i <= n; ++i)
vis[abs(a[i]-a[i-1])] = true;//abs(a[i]-a[i-1])这个数字已经出现过
for(int i = 1; i <= n-1; ++i)
{
if(vis[i] == false)
{
cout << "Not jolly";
return 0;
}
}
cout << "Jolly";
return 0;
}