1.6.07 有趣的跳跃

1.题目

描述

一个长度为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

2.题目意思总结
从题目得知,要判断一个长度为n的序列中是否存在“有趣的跳跃”,需要对相邻两个元素的差进行冒泡排序,判断它们是否是从1到(n-1)。如果是,就存在“有趣的跳跃”。反之则不存在。
但如果这个数列只有一个元素,那么它也是存在“有趣的跳跃”的。

 

3.解题思路

1).输入数列。

2).相邻两数作差。

3).将差进行冒泡排序。

4).判断排序后的数列是否是从1到(n-1)。如果是,输出"Jolly",否则输出"Not jolly"。

 

4.代码实现

#include<bits/stdc++.h>
using namespace std;
int main(){
  int a[4000],b[4000],n,j,t=0;
  cin>> n;
  cin>> b[1];
  for(int i=2;i<n+1;i++){//输入数列 
    cin>> b[i];
    a[i-1]=b[i-1]-b[i];//相邻两个元素作差
    if(a[i-1]<0){
      a[i-1]=a[i-1]/-1;
    }
  }
  for(int k=1;k<=n-1;k++){//冒泡排序,每次排好一个数,排k次。
    for(int i=1;i<=n-k-1;i++){//依次相邻两个数进行比较,比较(n-k-1)次
      if(a[i]>a[i+1]){//判断大小
        j=a[i+1];//两个数交换位置
        a[i+1]=a[i];
        a[i]=j;
      }
    }
  }
  for(int i=1;i<n;i++){//判断是否存在“有趣的跳跃”
    if(a[i]==i){
      t++;
  }
}
  if(t==n-1){//输出结果
    cout<<"Jolly";
  }
  else{
    cout<<"Not jolly";
  }
  return 0;
}

 

5.重点总结

1).理解“有趣的跳跃”的含义。

2).正确编写冒泡排序程序。

 

posted @   邓乔泽  阅读(61)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示