You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二维整数数组最大值获取:行列输出与预期不符问题排查

问题原因分析及解决办法

你的问题核心是行列索引的顺序搞混了,常见的几个错误场景如下:

1. 输入行列时顺序颠倒

如果你的代码里读取行列的代码是这样的:

int cols, rows;
scanf("%d,%d", &cols, &rows); // 先读列数,再读行数

那输入2,1时,cols会被设为2,rows设为1,后续数组存储和遍历的逻辑就完全错了。正确的应该是先读行数再读列数:

int rows, cols;
scanf("%d,%d", &rows, &cols);

2. 数组访问时行列索引反了

C语言中二维数组的访问顺序是arr[行索引][列索引],如果你的代码里写成了arr[列索引][行索引],比如:

// 错误示例:把j当行,i当列
for (int i = 0; i < cols; i++) {
    for (int j = 0; j < rows; j++) {
        scanf("%d", &arr[j][i]);
        if (arr[j][i] > max) {
            max = arr[j][i];
            row = j + 1; // 这里的j实际是列索引
            col = i + 1; // i实际是行索引
        }
    }
}

这样遍历和赋值时就把行列完全搞反了。正确的应该是外层循环遍历行,内层遍历列:

for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
        scanf("%d", &arr[i][j]);
        if (arr[i][j] > max) {
            max = arr[i][j];
            row = i + 1; // 行号从1开始计数
            col = j + 1; // 列号从1开始计数
        }
    }
}

3. 记录行列的变量赋值错误

如果遍历顺序是对的,但更新行列变量时搞反了,比如:

if (arr[i][j] > max) {
    max = arr[i][j];
    row = j + 1; // 错误:把列索引赋给了行变量
    col = i + 1; // 错误:把行索引赋给了列变量
}

这也会导致输出的行列颠倒,修正成row = i+1; col = j+1即可。

你可以对照自己的代码,检查这几个常见的错误点,基本上就能解决行列颠倒的问题。

内容的提问来源于stack exchange,提问作者a student

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 06:02:41