有趣的跳跃
描述
一个长度为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到(n-1),就是“有趣的跳跃”。
解题思路
先用第一个for循环,输入此数组,再用第二个for循环求出相邻元素差的绝对值,然后用第三个for循环排列出从小到大的序列,最后用第四个for循环判断出此序列是否存在“有趣的跳跃”,并输出结果。
代码实现#include<bits/stdc++.h>
using namespace std; int main(){ int n,a[3100],c[3010]; cin>>n; for(int i=1;i<=n;i++){//从1开始到n结束 cin>>a[i];//输入a数组 } for(int i=1;i<=n-1;i++){//一共有n个数,求n-1的差 c[i]=abs(a[i]-a[i+1]);//求出相邻元素差的绝对值 } for(int i=1;i<=n-2;i++){//此循环用来交换n-1个数的最小值(找到最小值,和前边值交换位置)
int min=c[i],q=i; for(int j=i;j<=n-1;j++){//此循环是用来找最小值 if(c[j]<min){//如果c[j]小于最小值,那么出c[j]就是下一个最小值 min=c[j];//存数组的数值 q=j;//用q来存数组的位置 } } swap(c[i],c[q]);//用最新最小值与之前的最小值交换 } for(int i=1;i<=n-1;i++){ if(i!=c[i]){//判断是否存在“有趣的跳跃” cout<<"Not jolly";//如果 return 0; } } cout<<"Jolly"; return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战