|
沙发
楼主 |
发表于 2020-3-20 20:38:06
|
只看该作者
此题的主要任务是判断相邻的两个数的差值是不是覆盖了1-(n-1)这些数字,就像三连击里面那个一样,我们可以用一个数组b(i)表示0到n-1之间的数是否吹出现过,他的初值都是0,出现了就变成1,最后看看b数组中b(1)到b(n-1)是否全部是1,只要他们全部加起来的总和是n-1的话,那就说明里面全部是1,没有一个0。(这种做法和我以前那个三连击里面的做法有点不一样,也是正确的)
- #include <iostream>
- #include <cmath>
- using namespace std;
- const int mm=1010;
- int n,a[mm],b[mm],i,s,x;
- int main()
- {
- cin>>n;
- for (int i=0; i<=n; i++) b[i]=0; //表示i这个数字没有出现
- for (int i=1; i<=n; i++) cin>>a[i];
- for (int i=2; i<=n; i++)
- {
- x=abs(a[i]-a[i-1]);
- if (x<=n) b[x]=1; /// 为什么x<=n??? 避免越界 x>mm怎么办!!
- }
- s=0;
- for (i=1; i<=n-1; i++) s+=b[i]; ///理想下每个都是1 加起来总和n-1
- if (s==n-1) cout<<"Jolly";
- else cout<<"Not jolly";
- return 0;
- }
复制代码 |
|