C语言 找“鞍点” 纠错

题目描述
找出一个二维数组的鞍点,该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点,输出“no”。
如: 65 48 -4 7 50
5 100 3 -56 81
19 32 -11 9 10
-1 69 -28 1 37
找到的鞍点是:32
输入描述
首先输入二维数组的行数、列数,然后按行依次输入所有元素。(行数和列数都小于10)
输出描述
对于每个测试实例,先输出鞍点的位置,即行号、列号(从0开始),然后再换行,输出鞍点的元素值。
如果没有鞍点,则输出“no”
样例输入
4 5
65 48 -4 7 50
5 100 3 -56 81
19 32 -11 9 10
-1 69 -28 1 37
样例输出
2 1
32

#include<stdio.h>
void main()
{
int n1,n2,a[10][10],i1,i2,i3,max,j1=0,j2=0;
scanf("%d %d",&n1,&n2);
for(i1=0;i1<n1;i1++)
for(i2=0;i2<n2;i2++)
scanf("%d",&a[i1][i2]);
for(i1=0;i1<n1;i1++)
{
max=a[i1][0];
for(i2=1;i2<n2;i2++)
{
if (a[i1][i2]>max)
{
max=a[i1][i2];
j1=i1;
j2=i2;
}
}
for(i3=0;i3<n1;i3++)
{
if(a[i3][j2]<max)
continue;
}
}
printf("%d %d\n%d",j1,j2);
}

错在哪里?
最新回答
泠月

2024-10-14 08:00:42

其实,这一题不难,你自己应该能找出bug。初始化,注意放的位置,还有,下面判断列最小时。
追问
真没找到
追答

我把你的代码改了一下,有注释,你看看能不能理解。

#include<stdio.h>
int main()
{
    int n1,n2,a[10][10],i1,i2,i3,max,j1=0,j2=0;
    int flag;                   //定义变量记录是否存在鞍点
    scanf("%d %d",&n1,&n2);
    for(i1=0; i1<n1; i1++)
        for(i2=0; i2<n2; i2++)
            scanf("%d",&a[i1][i2]);
    for(i1=0; i1<n1; i1++)
    {
        max=a[i1][0];
        j1=i1;          //每一次假设最大值在每行首位置
        j2=0;
        flag=1;
        for(i2=1; i2<n2; i2++)
        {
            if (a[i1][i2]>max)
            {
                max=a[i1][i2];
                j1=i1;
                j2=i2;
            }
        }
        for(i3=0; i3<n1; i3++)
        {
            if(a[i3][j2]<max)
            {
                flag=0;         //该行不存在鞍点
                break;
            }
        }
        if(flag)      //鞍点值最多一个
            break;
    }
    if(flag)
        printf("%d %d\n%d\n",j1,j2,max);
    else                         //没有
        printf("no\m");
    return 0;
}

你与北诗

2024-10-14 08:01:02

mark !Take a shower!