07 有趣的跳跃

 
 

题目描述:

输入:一行,第一个数是n(0 < n < 3000),为序列长度,接下来有n个整数,依次为序列中各元素,各元素的绝对值均不超过1,000,000,000。输出一行,若该序列存在“有趣的跳跃”

输出"Jolly",否则输出"Not jolly"。

思路:第一个for循环输入相应个数的整数~第二个for循环求输入的相邻数之间的差的绝对值~对求得的差值进行排序~第三个for循环进行jolly判断:

排好序的差值相邻两数字后减前一个数的和若为jolly应=n-2;

 

阻碍:1,求两数字之差的绝对值的函数:c=abs(a-b)~a b c都为整型

    2 排序:冒泡排序:注意i=1还是i=0

    3 i:是从0开始还是从1开始很重要!:因为从1开始后面两两相减的话可能会有溢出的数组!!

    4 注意n=1的情况:永远为Jolly

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 //三个for循环
 4 int main(){
 5     int n=0;                    //序列的长度
 6     int a[3010],b[3010];        //定义两个数组,一个接收输入的数,一个接收两数字之间的差值
 7     scanf("%d",&n);
 8 
 9 
10     //第一个for循环:输入n个数 
11     for(int i=0;i<n;i++){
12         scanf("%d",&a[i]);
13     }
14 
15     //n=1:任何只包含单个元素的序列一定存在“有趣的跳跃”
16     if(n==1)
17         printf("Jolly");
18     else if(n>1){
19     
20 
21     //第二个for循环:求输入数两两之间的差值
22     for(int i=0;i<n-1;i++){    //输入n个数则会有n-1个差值
23         b[i]=abs(a[i]-a[i+1]);  
24     }
25 
26     // //排序差值
27     // for(int i=1;i<=n-2;i++){
28     //     int min=b[i],q=i;
29     //     for(int j=i;i<=n-1;j++){
30     //         if(b[j]<min){
31     //             min=b[j];
32     //             q=j;
33     //         }
34     //     }
35     //     int tem;
36     //     tem=b[i];
37     //     b[q]=tem;
38     //     b[i]=b[q];
39         
40     // }
41     // for (int i = 1; i <= n-1; i++)
42     // {
43     //     if(i != b[i]){
44     //         printf("Not Jolly");
45     //         return 0;
46     //     }
47     // }
48     // printf("Jolly");
49     // return 0;
50     
51 
52     //冒泡排序对求出来的差值进行由小到大的排序
53     //待排序数字:n-1个
54     int min=0;
55     for(int i=0;i<n-1;i++){         //一共排序n-1轮
56         for(int j=1;j<n-1;j++){
57             if(b[j]<b[j-1]){
58                 min=b[j];
59                 b[j]=b[j-1];
60                 b[j-1]=min;
61             }
62         }
63     } 
64 
65     //第三个for循环:jolly判断
66     int flag=0;
67     for(int i=0;i<n-1;i++){
68         if(b[i+1]-b[i]==1)
69             flag++;
70         else    
71             break;
72     }
73     if(flag==n-2)
74         printf("Jolly");
75     else
76         printf("Not jolly");
77     }
78     
79     return 0;
80 }

 

posted on 2022-10-10 22:34  罗小罗佳油  阅读(440)  评论(0编辑  收藏  举报