【问题描述】
对于一个具有 n 个元素的整型数组 a , 若对于1≤ i <n-1
当ai >ai-1时,必有ai>ai+1, 反之亦然;
当ai<ai-1时,必有ai<ai+1, 反之亦然;
ai-1 ≠ ai, ai ≠ ai+1。
则称数组 a 为波形数组, 例如数组 1 2 -5 9 4 5为波形数组,而3 5 5 4不是波形数组。
【输入形式】
输入的第一行为一个正整数T,表示测试用例的组数。
接下来的T组数,每组的第一行为一个正整数 n ( n ≥ 3) ,表示数组的大小,接下来一行为 n 个整数。
【输出形式】
输出有T行,每行对应每个测试用例的结果,如果为波形数组,则输出"Yes",否则输出"No"。
【样例输入】
2 6 1 2 -5 9 4 5 4 3 5 5 4
【样例输出】
Yes No
以下是为你提供的带有详细注释的代码:
```cpp
#include <iostream>
using namespace std;
// 函数功能:判断输入的数组是否满足特定条件
bool Array(int n) {
int a[n];
// 定义一个长度为 n 的整数数组 a,用于存储输入的数字
for (int i = 0; i < n; ++i) {
cin >> a[i];
// 循环读取 n 个整数存入数组 a
}
int state = 0;
// 初始化状态变量 state 为 0,表示初始状态,既不是递增也不是递减
for (int i = 0; i < n - 1; ++i) {
// 遍历数组 a,比较相邻两个元素的大小关系
if (a[i] > a[i + 1] && (state == 0 || state == -1)) {
// 如果当前元素大于下一个元素,并且当前状态为初始状态(0)或者递减状态(-1)
state = 1;
// 将状态设置为递增状态(1)
}
else if (a[i] < a[i + 1] && (state == 0 || state == 1)) {
// 如果当前元素小于下一个元素,并且当前状态为初始状态(0)或者递增状态(1)
state = -1;
// 将状态设置为递减状态(-1)
}
else {
return 0;
// 如果不满足上述两种情况,说明数组不满足特定条件,返回 false
}
}
return 1;
// 如果循环结束都没有返回 false,说明数组满足特定条件,返回 true
}
int main() {
int n, m;
cin >> n;
// 读取测试用例的数量 n
for (int i = 0; i < n; ++i) {
cin >> m;
// 读取每个测试用例中数组的长度 m
if (Array(m)) {
cout << "Yes" << endl;
// 如果调用 Array 函数返回 true,说明该测试用例中的数组满足条件,输出"Yes"
}
else {
cout << "No" << endl;
// 如果调用 Array 函数返回 false,说明该测试用例中的数组不满足条件,输出"No"
}
}
return 0;
}
```

1440

被折叠的 条评论
为什么被折叠?



