调试了好多遍,有没有帮我看看哪错了。

img

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#include<string.h>
/*
87  90  110  98
70  97  210  65
99  45  120  30
*/
int main()
{
    int a[3][4];
    int i,j,k,isfind,m=0;//m是判断是否有没有鞍点的
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    //先找每一行对应最大的值
    //因此我们要定义一个变量max
    int max;
    for(i=0;i<3;i++)
    {
        isfind=1;
        max=a[i][0];//一般设有初始值的都是为了让他去比较而不是a[i][0];
       for(j=0;j<4;j++)
       {
           if(max<a[i][j])
           {
               max=a[i][j];
              k=j;
           }
     //找到该数对应的列数,因为j会变,所以要记录这个数
    //此时找到了最大值
           
       }
       //找到对应列数的最小值
       for(j=0;j<3;j++)
       {
           if(a[j][k]<max)
           {
                isfind=0;
               break;
           }
       }
       if(isfind==1)
       {
           m=1;
           printf("%d",a[i][k]);
       }


    }
    if(m==0)
    {
        printf("NO");
    }
}

在第27行,你要让k=0,不然这组数据过不了。

100 101 102 103
90 80 70 60
200 300 400 500

因为如果k没有设初值,则k可能为上一次选到的。如果当前没有a[i][j]比a[i][0]大,则k就是上一次的值,不一定为0。
所以k要设一个初值

 if(max<a[i][j])
           {
               max=a[i][j];
           }
            k=j;
改为
 if(max<a[i][j])
           {
               max=a[i][j];
                k = j;
           }
  

是逻辑错误还是语法错误