为什么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;
}