- 描述
-
一个长度为n(n>0)的序列中存在“有趣的跳跃”当前仅当相邻元素的差的绝对值经过排序后正好是从1到(n-1)。例如,1 4 2 3存在“有趣的跳跃”,因为差的绝对值分别为3,2,1。当然,任何只包含单个元素的序列一定存在“有趣的跳跃”。你需要写一个程序判定给定序列是否存在 “有趣的跳跃”。
- 输入
- 一行,第一个数是n(0 < n < 3000),为序列长度,接下来有n个整数,依次为序列中各元素,各元素的绝对值均不超过1,000,000,000。
- 输出
- 一行,若该序列存在“有趣的跳跃”,输出"Jolly",否则输出"Not jolly"。
- 样例输入
-
4 1 4 2 3
- 样例输出
-
Jolly
1 #include<stdio.h> 2 int c[3000]={0}; 3 int max(int a,int b) 4 { 5 return (a>b)?(a-b):(b-a); 6 } 7 void poi (int l,int r) 8 { 9 if (r<=l) 10 return ; 11 int l1,r1,temp,mid; 12 l1=l;r1=r;mid=c[l]; 13 while (l1!=r1) 14 { 15 if (c[r1]<mid) 16 if (c[l1]>mid) 17 { 18 temp=c[l1]; 19 c[l1]=c[r1]; 20 c[r1]=temp; 21 } 22 else 23 l1++; 24 else 25 r1--; 26 } 27 temp=c[l]; 28 c[l]=c[r1]; 29 c[r1]=temp; 30 poi (l,r1-1); 31 poi (r1+1,r); 32 } 33 int main() 34 { 35 int a[3001]={0}; 36 int n,i,x=1; 37 scanf("%d",&n); 38 for(i=1;i<=n;i++) 39 scanf("%d",&a[i]); 40 for(i=1;i<=n-1;i++) 41 { 42 c[i]=max(a[i],a[i-1]); 43 } 44 poi(1,n-1); 45 for(i=1;i<=n-1;i++) 46 if(c[i]!=i) 47 { 48 x=0; 49 break; 50 } 51 if(n<=2) x=1; 52 if(x==1) printf("Jolly "); 53 else printf("Not jolly "); 54 return 0; 55 }