C语言求鞍点,有懂的吗?

为什么k>=m,k不是<m吗?
#include <stdio.h>
int main()
{
int m,n;
printf("输入组数的行和列:\n");
scanf("%d %d",&m,&n);
int a[m][n],i,j;
printf("该组数的数据为:\n");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
int k,l,max;
for(i=0;i<=m-1;i++)
{
max=a[i][0];
l=0;
for(j=1;j<n;j++)
{
if(max<a[i][j])
{
max=a[i][j];
l=j;
}
}
for(k=0;k<m;k++)
{
if(max>a[k][l])
break;
}
if(k>=m)
{
printf("鞍点为a[%d][%d]=%d\n",i,j,max);
break;
}
else
{
printf("没有鞍点\n");
break;
}
}
return 0;
}

你指的是if语句里的k>=m吗?
数组的鞍点是该行最大、该列最小的元素。
max表示行最大的元素,m是行,你问的k在上一句for循环中是为了数组遍历不出现超出的行。
if里的k就是为了上一句的结果判断。如果k大于等于m:说明上一句for循环中max始终是最小的所以没有break。
也就是表示,max在行最大在列始终是最小的时候没有break,是由于for循环里的k++导致k的值为m跳出for循环。

如果是if(k<m)那它就在上一句就已经break说明没有鞍点了。

供参考:

#include <stdio.h>
#define N 10
int main()
{
    int  a[N][N] = { 0 }; //a[3][4]={{2,2,6,3},{2,4,5,3},{5,1,7,2}};
    int row, col, i, j, k, m = 0, n = 0, max = 0, min = 0, flg = 0;
    printf("输入组数的行和列:\n");
    scanf("%d%d", &row, &col);
    printf("该组数的数据为:\n");
    for (i = 0; i < row; i++)
        for (j = 0; j < col; j++)
            scanf("%d", &a[i][j]);
    for (i = 0; i < row; i++)
    {
        max = a[i][0];  
        for (j = 0; j < col; j++) 
        {
            if (a[i][j] > max)
            {
                m = j;    //列
                max = a[i][j];
            }
        }
        min = a[0][m];
        for (k = 0; k < row; k++)
        {
            if (a[k][m] < min)
            {
                n = k;  //行
                min = a[k][m];
            }
        }
        if (max == min)
        {
            printf("鞍点为a[%d][%d] = %d\n", n, m, a[n][m]);
            flg = 1;
        }
    }
    if (!flg)
        printf("无鞍点\n");
    return 0;
}