C++ 判断数组是否符合'可多的跳跃' - 代码实现与详解
以下是一个解决这个问题的 C++ 代码示例:
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
bool isJolly(const std::vector<int>& nums) {
int n = nums.size();
std::vector<bool> diff(n-1, false);
for(int i = 1; i < n; i++) {
int absoluteDiff = std::abs(nums[i] - nums[i-1]);
if(absoluteDiff <= 0 || absoluteDiff >= n || diff[absoluteDiff-1]) {
return false;
}
diff[absoluteDiff-1] = true;
}
return true;
}
int main() {
int n;
while(std::cin >> n) {
std::vector<int> nums(n);
for(int i = 0; i < n; i++) {
std::cin >> nums[i];
}
if(isJolly(nums)) {
std::cout << "Jolly" << std::endl;
} else {
std::cout << "Not jolly" << std::endl;
}
}
return 0;
}
该代码首先定义了一个函数 isJolly,用于判断给定的数组是否符合'可多的跳跃'。该函数首先创建一个长度为 n-1 的布尔型数组 diff,用于记录数组两个连续元素之间的差的绝对值是否出现过。
然后,遍历数组中的每对连续元素,计算它们之间的差的绝对值,并判断该差的绝对值是否在范围 [1, n-1] 内。如果不在范围内,或者该差的绝对值已经在 diff 数组中出现过,则返回 false。
如果遍历结束后没有返回 false,则说明数组符合'可多的跳跃',返回 true。
在 main 函数中,先读取输入的数组长度 n,然后依次读取数组元素。每读取完一组测试数据后,调用 isJolly 函数判断数组是否符合要求,并输出相应的结果。
注意:该代码假设输入数据的格式正确,即每组测试数据的第一行是表示数组长度的一个整数,接下来的一行是用空格隔开的整数数组。
原文地址: http://www.cveoy.top/t/topic/pFoi 著作权归作者所有。请勿转载和采集!