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

矩阵中行最小且列最大元素的查找程序问题求助

问题:矩阵Min-Max元素查找程序故障排查

需求说明

编写程序输入L*C(L:行数,C:列数)的整数矩阵,找出并显示所有既是所在行最小值又是所在列最大值的元素及其位置(i,j);若不存在此类元素,输出提示信息:The matrix does not contain any Min-Max.

示例

示例1:
输入矩阵:

1 2 3
4 5 6
7 8 9
13 15 16

输出:Tab[4,1]=13

示例2:
输入矩阵:

17 11 3
4  5  6
7  8  9
15 10 16

输出:The matrix contains no Min-Max.

用户提供的C代码

// 注:原代码遗漏<stdio.h>头文件
int main() {
    int L , C , i , j ,maxc,minl ;
    int Tab[20][20];
    printf("Introduire le nombre des lignes du matrice (MAX 20): ");
    scanf("%d",&L);
    printf("Introduire le nombre des colonnes du matrice (MAX 20): ");
    scanf("%d",&C);
    for(i=0; i<L; i++)
    {
        for(j=0; j<C; j++)
        {
            printf("Donner l'element (%d,%d): ",i+1,j+1);
            scanf("%d", &Tab[i][j]);
        }
    }

    for(j=0 ;j<C;j++)
    {
        maxc=Tab[0][j];
        for(i=0;i<L;i++)
        {
            minl=Tab[i][0];
            if(Tab[i][j]>maxc && Tab[i][j]<minl )
            {
                printf("Tab[%d,%d]=%d ",i+1,j+1,Tab[i][j]);
            }
            else
            {
                printf("La matrice ne contient aucun Min-Max.");
            }
        }
    }

    return 0;
}

代码问题排查与修正

核心问题点

  1. 行/列极值计算错误

    • 仅将minl初始化为行首元素、maxc初始化为列首元素,未遍历整行/整列计算真正的最小值/最大值。
    • 判断逻辑完全错误:需求是元素等于行最小值且等于列最大值,原代码写成Tab[i][j]>maxc && Tab[i][j]<minl,逻辑完全相反。
  2. 输出逻辑混乱

    • 内层循环每一次不满足条件就输出提示,会导致重复输出错误信息,找到目标元素时也会夹杂错误提示。
  3. 遗漏必要头文件

    • 使用printf/scanf未包含<stdio.h>,可能导致编译失败。

修正后的代码

#include <stdio.h>

int main() {
    int L, C, i, j, minl, maxc;
    int Tab[20][20];
    int found = 0; // 标记是否找到符合条件的元素

    printf("输入矩阵行数(最大20): ");
    scanf("%d", &L);
    printf("输入矩阵列数(最大20): ");
    scanf("%d", &C);

    // 输入矩阵元素
    for(i = 0; i < L; i++) {
        for(j = 0; j < C; j++) {
            printf("输入元素(%d,%d): ", i+1, j+1);
            scanf("%d", &Tab[i][j]);
        }
    }

    // 遍历每个元素检查条件
    for(i = 0; i < L; i++) {
        // 计算第i行的最小值
        minl = Tab[i][0];
        for(j = 1; j < C; j++) {
            if(Tab[i][j] < minl) {
                minl = Tab[i][j];
            }
        }

        // 检查当前行中等于最小值的元素是否为所在列的最大值
        for(j = 0; j < C; j++) {
            if(Tab[i][j] != minl) continue;

            // 计算第j列的最大值
            maxc = Tab[0][j];
            for(int k = 1; k < L; k++) {
                if(Tab[k][j] > maxc) {
                    maxc = Tab[k][j];
                }
            }

            if(Tab[i][j] == maxc) {
                printf("Tab[%d,%d]=%d\n", i+1, j+1, Tab[i][j]);
                found = 1;
            }
        }
    }

    // 未找到时统一输出提示
    if(!found) {
        printf("The matrix does not contain any Min-Max.\n");
    }

    return 0;
}

修正说明

  • 新增found变量标记是否找到目标元素,避免重复输出提示。
  • 先计算每行最小值,再对行内符合最小值的元素,计算其所在列的最大值,验证是否满足条件。
  • 修复判断逻辑,确保符合需求。
  • 补全必要头文件,调整提示语为中文(可根据需求改回原法语)。

内容的提问来源于stack exchange,提问作者Charef Wissam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:35:15