有趣的跳跃 c语言

本文介绍了一个编程问题,涉及序列差值判断,使用C语言实现,包括输入、计算差值数组、排序并检测有趣跳跃条件。
摘要由CSDN通过智能技术生成

描述

一个长度为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)的数,有则存在

代码

#include <stdio.h>

#include <math.h>

int main() {

int n,i;

scanf("%d",&n);

int a[n]; if(n==1) printf("Jolly");//判断是否是单元素

for(i=1;i<=n;i++) {

scanf("%d",&a[i]);

}

int b[n-1];//这里注意一下数组b的长度

for(i=1;i<=n-1;i++) {

b[i]=abs(a[i+1]-a[i]);//注意数组a的范围

}

for(i=1;i<n-1;i++)//从小到大选择排序,当然还有冒泡排序等等

{

    for(int j=i+1;j<n;j++)
    {
    int temp;
    if(b[i]>b[j])
    {
        temp=b[i];
        b[i]=b[j];
        b[j]=temp;
    }
    }
    printf("%d",b[i] );//这里输出数组b,方便我们判断程序是否正确 
} 
printf("\n");
for(i=1;i<n;i++)
{
    if(b[1]==1&&b[i+1]-b[i]==1)
    {
        continue;//continue是不断执行下一条循环 
    }
    else
    {
        break;//直接退出循环
        //因为数组b已经排序了,最小值肯定必须是1,后面也必须是连接 
    }
}   
if(i==n-1) printf("Jolly");//因为i作用域是整个main函数,所以最后的i的值是最后一个循环停下来的值 
else printf("Not Jolly");
}
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值