c++ - 给定程序中的逻辑错误找不到它
问题描述
在这个问题中,我们有两个数组attackArray 和defArray,它们的大小都是N。
现在我们认为每个数组元素都是一个说话者。我们需要输出大于其邻居且大于其总和的特定元素。如果多个元素可以输出,则输出最大的一个。
-1 如果没有找到这样的元素。
自定义输入我试图用它来运行它
输入
4
4
1 1 4 1
3 4 2 1
7
5 4 5 4 5 4 5
3 2 4 7 2 5 9
3
5 8 1
5 6 20
20
46 35 17 37 39 48 10 49 44 11 36 4 2 22 16 41 26 8 15 40
4 41 6 35 49 50 28 46 22 17 13 36 31 2 33 14 150 47 29 39
输出
3
-1
20
-1
.最后的输出应该是 150。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin >> T;
if (T > 100 || T < 1)
return 0;
do {
vector<int> ans;
int N;
cin >> N;
if (N > 100 || N < 3)
return 0;
vector<long long int> attackArray(N), defArray(N);
for (int i = 0; i < N; i++) {
cin >> attackArray.at(i);
}
for (int i = 0; i < N; i++) {
cin >> defArray.at(i);
}
if (defArray.at(0) > attackArray.at(1) && defArray.at(0) > attackArray.at(N - 1) && defArray.at(0) > attackArray.at(1) + attackArray.at(N - 1)) {
ans.push_back(defArray.at(0));
}
if (defArray.at(N - 1) > attackArray.at(0) && defArray.at(N - 1) > attackArray.at(N - 2) && defArray.at(N - 1) > attackArray.at(0) + attackArray.at(N - 2)) {
ans.push_back(defArray.at(N - 1));
}
for (int i = 1; i < N - 1; i++) {
int nexti, previ;
nexti = i + 1;
previ = i - 1;
if (defArray.at(i) > attackArray.at(nexti) && defArray.at(i) > attackArray.at(previ) && defArray.at(i) > attackArray.at(nexti) + attackArray.at(previ)) {
ans.push_back(defArray.at(i));
}
else {
ans.push_back(-1);
break;
}
}
sort(ans.begin(), ans.end(), greater<int>());
cout << ans[0] << endl;
T--;
} while (T != 0);
return 0;
}
解决方案
它适用于第一行,因为 defArray 中的第一个元素大于邻居的攻击,因此不需要进入循环(您专门检查第一个元素)。
它适用于第三行,因为 defArray 中的最后一个元素大于邻居的攻击,因此不需要进入循环(您专门检查最后一个元素)。
它不适用于第一个之后的循环中的任何项目,因为只要 defArray 中的某些内容不大于您调用的邻居的攻击break;
并退出循环。您需要检查 defArray 中的每个元素,但只要任何元素失败,循环就会停止。你为什么还要打电话break;
?
我还没有测试所有的边界条件,但删除break;
似乎确实可以解决它......
推荐阅读
- javascript - 异步 TS/JS 函数中的全局赋值是否安全,不会意外覆盖现有值?
- virtual-machine - 如果我的 VirtualBox 克隆永远不会同时运行,我是否需要一个新的 MAC 地址?
- java - 编写基于 SonarQube Java 的规则来检查 assertj 错误,无法确定何时不调用链式方法
- oracle - Oracle CLOB 数据类型给出错误:`SQL 错误:ORA-01704:字符串文字太长`
- python - 感知器没有正确学习
- javascript - 使用 addEventListener 时如何更新 id?
- python - 使用moviepy使用ffmpeg阅读视频
- amazon-web-services - AWS Fargate 延迟
- swift - 使用分隔符拆分带有特殊字符的 utf16 字符串
- javascript - 如何在 laravel 的 ajax 数据中选择选项