🚀你的旅程将在这里启航!本专栏所有题目均包含优质解题思路,高质量解题代码,详细代码讲解,助你深入学习,高分通过!
文章目录
- 【华为OD机试高分必刷题目】神奇的卡片(C++等差数列实现)
- 题目描述
- 解题思路
- C++题解代码
- 代码OJ评判结果
- 代码讲解
- 寄语
【华为OD机试高分必刷题目】神奇的卡片(C++等差数列实现)
题目描述
话说学长是公认的天才,他刚一出生的时候就从一堆数字卡片中选出了4张卡片:5,7,6,8!这4个数字有什么神秘之处呢?他发现,如果把这4张卡片自左往右的排成:5,6,7,8,这4个数字就构成了等差数列!当年学长选出了n组卡片,据说都能够构成等差数列。但是事实真的是这样吗?学长真的有这么神奇吗?后台给出的n组数据就是学长选出的n组卡片,请你判断一下每一组卡片是否能构成等差数列!
输入
第一个数为数据的组数n,表示后面有n行,每行中的第一个数为该组数据的元素个数m(1 ≤ m ≤ 100),其后是m个正整数(不会超出int的表示范围)。
输出
如果能够构成等差数列,输出“yes”,否则输出“no”(均不含引号)。
样例输入
2
4 5 7 6 8
8 1 7 3 2 8 12 78 3
亚琼
yes
no
解题思路
解题思路如下:
-
读取输入的数据组数n。
-
对于每一组数据,读取元素个数m和m个正整数。
-
对这m个正整数进行排序。
-
计算相邻数字的差,检查是否为一个常数。
-
如果差值是常数,则输出 “yes”;否则,输出 “no”。
通过这个思路,我们利用了等差数列的性质,即相邻数字之差为常数。排序是为了保证数字的顺序,方便计算差值。最终的判断逻辑是通过遍历相邻数字,检查它们的差是否一致。如果一致,说明构成了等差数列,输出 “yes”;否则,输出 “no”。
C++题解代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// 判断是否能构成等差数列的函数
string isArithmeticSequence(vector<int>& nums) {
if (nums.size() < 3) {
return "yes"; // 如果元素个数小于3,直接返回 "yes"
}
sort(nums.begin(), nums.end()); // 先将数组排序
int diff = nums[1] - nums[0]; // 计算等差
for (int i = 2; i < nums.size(); i++) {
if (nums[i] - nums[i - 1] != diff) {
return "no";
}
}
return "yes";
}
int main() {
int n;
cin >> n; // 读取输入的数据组数
// 遍历每一组数据
for (int k = 0; k < n; k++) {
int m;
cin >> m; // 读取每组数据的元素个数
// 读取每组数据的元素列表
vector<int> data(m);
for (int i = 0; i < m; i++) {
cin >> data[i];
}
// 判断是否构成等差数列并输出结果
string result = isArithmeticSequence(data);
cout << result << endl;
}
return 0;
}
代码OJ评判结果
评判状态
Accepted
评判状态 (测试)
Accepted
内存
18352KB
用时
447ms
语言
c++
代码长度
1154B
提交时间
2023-11-17 20:00:16
评判时间
2023-11-17 20:00:18
代码讲解
以下是对上述 C++ 代码的详细讲解:
-
isArithmeticSequence
函数:isArithmeticSequence
是一个用于判断输入的整数向量是否构成等差数列的函数。- 如果向量的元素个数小于3,直接返回 “yes”,因为任意两个数字都构成等差数列。
- 使用
sort
函数对向量进行排序。 - 计算相邻数字的差,检查是否为一个常数。如果差值是常数,则返回 “yes”;否则,返回 “no”。
-
主程序部分:
- 使用
cin
从标准输入中读取数据。 - 读取输入的数据组数
n
。 - 遍历每一组数据:
- 读取每组数据的元素个数
m
。 - 读取每组数据的元素列表,并存储在整数向量
data
中。 - 调用
isArithmeticSequence
函数判断是否构成等差数列,并输出结果。
- 读取每组数据的元素个数
- 使用
这个 C++ 代码的结构与前述 Python 和 Java 代码类似,通过函数将判断等差数列的逻辑独立出来,提高了代码的可读性和复用性。C++ 使用向量(vector
)作为动态数组的数据结构,并使用标准库中的 sort
函数进行排序。
寄语
🚀✨ 朋友,希望你的华为OD机试就像是一场轻松的技术party!愿你的代码如同畅快的音符,跳跃在键盘上,最后弹奏出一曲高分之歌。加油,你是技术舞台上的巨星!通过机试,就像是风轻云淡,轻轻松松就把高分收入囊中。祝愿你的编程之旅一路顺风,破风前行,每一行代码都是成功的注脚!🌈💻