请问各位,此题需求矩阵的鞍点,我的代码错在哪,该怎么改呢


#include<stdio.h>
#include<stdlib.h>
int main()
{
    int m,p,k,max,lie[3]={0},i,j,a[3][3]={{1,5,3},{7,10,4},{4,9,5}};
    for(i=0;i<3;i++)
    {
        for(j=0,p=0;j<3;j++)
        {
            max=a[i][0],lie[p]=0;
            if (a[i][j]>max)
            {
                max=a[i][j];
                lie[p]=j;
                
            }

        }
        p++;
        
    }
    m=0;
    while(1)
    {
    
    
     for(k=0;k<3;k++)
    {
        if(a[k][lie[m]]>max)
        {
            printf("a[%d][%d]为鞍点,值为%d\n",k,lie,a[k][lie[m]]);
        }
    }
    m++;
    if(m==3)
    {
        break;
    }
}
    
    return 0;
}

题主的代码修改如下,供参考:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int m,p,k,max,lie[3]={0},i,j,a[3][3]={{1,5,3},{7,10,4},{4,9,5}};
    for(i=0;i<3;i++)
    {
        max=a[i][0];lie[i]=0;
        for(j=0;j<3;j++)      //for(j=0,p=0;j<3;j++)
        {
            //max=a[i][0],lie[p]=0;
            if (a[i][j]>max)
            {
                max=a[i][j];
                lie[i]=j;
            }
        }   //p++;
    }
    m=0;i=0;   //修改
    while(1)
    {
        max=a[i][lie[m]]; //修改
        for(k=0;k<3;k++)
        {
            if(a[k][lie[m]]<max)
            {
               max=a[k][lie[m]]; //修改
            }
        }
        if(max == a[i][lie[m]])  //修改
             printf("a[%d][%d]为鞍点,值为%d\n",i,lie[m],a[i][lie[m]]);
        m++;i++;                 //修改
        if(m==3)
        {
            break;
        }
    }
    return 0;
}

另一种写法,供参考:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int m,p,k,max,min,i,j,a[3][3]={{1, 5,3},
                                   {7,10,4},
                                   {4, 9,5}};// lie[3]={0},
    int row=0,col=0;
    for(i=0;i<3;i++)
    {
        max=a[i][0];
        for(j=0;j<3;j++)
        {
            if (a[i][j]>max)
            {
                max=a[i][j];
                col = j;
            }
        }
        min=a[0][col];
        for(k=0;k<3;k++)
        {
            if(a[k][col]<min)
            {
                min=a[k][col];
                row=k;
            }
        }
        if(max == min)
            printf("a[%d][%d]为鞍点,值为%d\n",row,col,a[row][col]);
    }
    if(max != min)
        printf("Not exist!\n");
    return 0;
}