有趣的跳跃

描述

一个长度为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; }
 
posted @   Lily0419  阅读(268)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示