UESTCOJ 508
题目描述
思考
这道题的本质就是对比两个数组间是否存在一一对应的关系,而且其中一个数组是从1到n-1,可以直接顺序读入数据,另一个数据长度为n已知。方法就是遍历数组,搜索求出的相邻差值,再遍历另一个连续数的数组,查询是否存在就行,方法就是打标记并在合适的时候退出循环。
学会在合适的地方善用flag哦
嗯,用动态分配可以实现,这道题就练手了
#include<bits/stdc++.h>
using namespace std;
int main(){
int *a,*b,T,n,i,j,x;
cin>>T;
while(T--){
int flag;
cin>>n;//有多少个数
a=(int *)malloc(sizeof(int)*n);//存输入数
b=(int *)malloc(sizeof(int)*n-1);//存连续输
for(i=1;i<=n;i++){
cin>>a[i];
}
for(i=1;i<=n-1;i++){
b[i]=i;
}
for(i=1;i<=n-1;i++){
flag=0;//搜每个差值都需要清零flag
x=abs(a[i]-a[i+1]);
for(j=1;j<=n-1;j++){
if(b[j]==x){
flag=1;//这个数能查找到就flag=1并查下一个
break;
}
}
if(!flag) break;//查完某个数时flag还是0就说明找不到了,果断退出后续搜索!
}
//想来想去还是判断flag最舒心...
if(!flag) cout<<"Not jolly"<<endl;
else cout<<"Jolly"<<endl;
}
return 0;
}