为神马这个代码示例都过不了?
2023-12-20 21:33:50
发布于:浙江
#include<bits/stdc++.h>
using namespace std;
int m, n, k, l, d;
int main() {
cin >> m >> n >> k >> l >> d;
int s1[n + 1] = {0};
int s2[m + 1] = {0};
int x, y, i1, j1;
while (d--) {
cin >> x >> y >> i1 >> j1;
if (abs(x - i1) == 1) {
s1[min(x, i1)];//问题好像在这儿
}
if (abs(y - j1) == 1) {
s2[min(y, j1)];
}
}
while (k--) {
int maxx = 0, maxy, flag = 0;
for (int i = 1; i <= n - 1; i++) {
if (s1[i] > maxx) {
maxy = i;
flag = 1;
}
}
if (flag == 0) break;
else cout << maxy << " ";
}
cout<<endl;
while (l--) {
int maxx = 0, maxy, flag = 0;
for (int i = 1; i <= m - 1; i++) {
if (s2[i] > maxx) {
maxy = i;
flag = 1;
}
}
if (flag == 0) break;
else cout << maxy << " ";
}
return 0;
}//求大神指导,谢谢了!!!
全部评论 1
s1[min(x,i1)]; 和 s2[min(y,j1)]; 没有累加(缺 ++) —— 导致统计数组全部为 0,最终没有任何输出。
找最大值的逻辑错误:if (s1[i] > maxx) 分支里只把 maxy=i,没有更新 maxx=s1[i],且 for 循环体没加大括号,导致永远选不到真正的最大值。
没有对选出的通道位置排序,而题目要求按从小到大输出。
没有处理重复选择同一行/列通道(选定某行后应该把它清零,避免再次被选)。
数组下标的对应关系:横向通道(行通道,最多 M-1 个)和下标的对应要理清——s2 实际是行通道(基于 m),s1 是列通道(基于 n),循环边界 i<=n-1 和 i<=m-1 要对齐正确的数组。原代码在输出时用 s1 配 n-1、s2 配 m-1,而统计时行相邻写入 s1、列相邻写入 s2,这与输出配对的维度交叉了,也容易乱。(个人观点)1周前 来自 浙江
0



有帮助,赞一个