C++计算连续年份高度不降序列长度结果错误问题排查
代码问题分析
- 相邻年份判断条件错误
需求要求相邻两项年份差值为1,你代码中判断条件写为T[i + 1] == T[i],实际是判断年份相等,完全不符合需求。你的输入样例里只有前两项年份同为1960,符合该错误条件,所以计数只累加了1次,这就是你输出结果为1的直接原因,该条件应该修改为T[i + 1] - T[i] == 1。 - 连续计数逻辑错误
你没有单独维护「当前连续符合条件的计数」变量,直接对存储最大值的maxdb累加,一旦中间出现不符合条件的项,计数不会重置,也无法正确统计不同连续段的最大值。 - 输出位置错误
cout << maxdb;写在遍历循环内部,会在每次循环时都打印一次当前的计数,而非最后输出最终的最大值。 - 语法不规范(非直接报错原因,但不符合C标准)
int T[N];、int Mag[N];属于变长数组(VLA),是C语言特性,标准C不支持该写法,在部分编译器下可能无法正常编译,建议替换为std::vector。
修复后的参考代码
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int N; cin >> N; vector<int> T(N); vector<int> Mag(N); for (int i = 0; i < N; i++) { cin >> T[i] >> Mag[i]; } int maxdb = 0; int curr = 0; for (int i = 0; i < N - 1; i++) { if (T[i + 1] - T[i] == 1 && Mag[i + 1] >= Mag[i]) { curr++; maxdb = max(maxdb, curr); } else { curr = 0; } } cout << maxdb << endl; return 0; }
针对你给出的输入样例,修复后代码会正确输出2,符合预期结果。
内容的提问来源于stack exchange,提问作者user17173786
相关产品推荐
相关产品推荐

