10038 Jolly Jumpers

题目大意:

题目原文:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=12&page=show_problem&problem=979

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 }
原文地址:https://www.cnblogs.com/syiml/p/2912825.html