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).正确编写冒泡排序程序。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!