题目大意:
n个数的数列,前后两个数之间的差组成的集合正好是1~n-1,这样的数列叫做jolly jumper。题目要求输入一个数列,输出Jolly或者Not jolly。
首先,输入n,按输入的顺序,逐一读取每个数,第一个数用x储存起来,然后读取第二个数&y,计算出|x-y|然后判断这个数字是不是在1~n-1之间,如果不是,那么Not jolly,如果是,用一个数组a标记这个差值已经出现过了。然后x=y,再读取第三个数&y,然后循环下去,若果出现之前已经出现过的差值,那么Not jolly。如果从头到尾都没有重复的差值,那么不需要判断是否全部出现过,可以输出Jolly了。
附上代码:
View Code
1 #include<stdio.h> 2 int main() 3 { 4 int a[3001],n,i,x,y,b,c; 5 while(scanf("%d",&n)!=EOF) 6 { 7 b=0; 8 for(i=1;i<=n;i++) a[i]=0;//初始化数组 9 scanf("%d",&x); 10 for(i=2;i<=n;i++) 11 { 12 scanf("%d",&y); 13 if(x>y) c=x-y;//求差的绝对值 14 else c=y-x; 15 if(c>=1&&c<=n-1&&a[c]==0) //这个差值c必须是1~n-1直接,且数组还未被标记过 16 {a[c]=1;x=y;}//标记a数组,且x=y继续下一个数据 17 else {b=1;} 18 } 19 if(b==1) printf("Not jolly\n"); 20 else printf("Jolly\n"); 21 } 22 return 0; 23 }