排序刷题7

题目来源:欢乐的跳 - 洛谷
解题思路:
  1. 初始化:定义一个静态数组 a 来存储输入的整数,和一个布尔数组 difs 来跟踪哪些差的绝对值已经出现过。

  2. 读取输入:通过循环从标准输入读取数组的大小 nn 个整数,存储在数组 a 中。

  3. 计算并检查差的绝对值:对于数组 a 中的每对连续元素,计算它们之间的差的绝对值,并检查这个差值是否在1到n-1的范围内。如果是,就在 difs 数组中对应位置标记为 true

  4. 验证“欢乐的跳”:遍历 difs 数组,确保从1到n-1的每个差值都已经出现过。如果所有差值都出现过,则数组符合“欢乐的跳”的定义;否则,不符合。

  5. 输出结果:根据数组是否符合“欢乐的跳”,输出相应的结果

#include<iostream>
#include<cmath>

using namespace std;

const int maxn = 1000; // 定义常量maxn,表示数组的最大长度

// isJolly函数检查数组是否为“欢乐的跳”
bool isJolly(int a[], int n) {
    bool difs[maxn] = { false }; // 初始化一个布尔数组difs,用来记录每个可能的差值是否出现过

    for (int i = 0; i < n - 1; ++i) { // 遍历数组中的每对连续元素
        int dif = abs(a[i] - a[i + 1]); // 计算相邻元素之间的差的绝对值
        if (dif >= 1 && dif < n) { // 如果差的绝对值在1到n-1之间
            difs[dif] = true; // 在difs数组中标记该差值已出现
        }
    }
    for (int i = 1; i < n; ++i) { // 检查difs数组,确保所有从1到n-1的差值都已出现
        if (!difs[i]) { // 如果有任何一个差值没有出现
            return false; // 则数组不是“欢乐的跳”
        }
    }
    return true; // 所有差值都出现过,数组是“欢乐的跳”
}

int main() {
    int n, a[maxn]; // n存储数组的长度,a是存储数组元素的静态数组
    while (cin >> n) { // 读取n,直到没有更多输入
        for (int i = 0; i < n; i++) { // 读取n个整数到数组a中
            cin >> a[i];
        }
        if (isJolly(a, n)) { // 调用isJolly函数检查数组a是否是“欢乐的跳”
            cout << "Jolly" << endl; // 如果是,则输出"Jolly"
        }
        else {
            cout << "Not jolly" << endl; // 如果不是,则输出"Not jolly"
        }
    }
    return 0;
}

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值