程序代码:
#include<stdio.h>
int main()
{
int i=0,j=0,m=0,n=0;
printf("请输入数组:\n");
int a[4][5] =
{
{1,2,3,5,2},
{3,4,6,7,5},
{4,3,4,6,7},
{6,7,5,9,0}
};
#if 0
int a[4][5] =
{
{1,2,19,5,2},
{3,4,18,7,5},
{4,3,54,6,7},
{6,7,115,9,0}
};
int a[4][5] =
{
{1,2,3,5,2},
{3,4,6,7,5},
{4,3,4,6,7},
{6,7,5,9,0}
};
/**************************************↓ 原来的代码,有误 ↓**************************************/
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
scanf("%d",&a[i][j]);
}
printf("\n");
}
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
if(a[i][j]>a[i][j+1])
{
m=a[i][j];
if(a[i][j]<a[i+1][j])
{
n=a[i][j];
printf("鞍点为:%d\n",a[i][j]);
}
else
printf("无鞍点\n");
}
else
printf("无鞍点\n");
}
}
/**************************************↑ 原来的代码,有误 ↑**************************************/
#endif
/**************************************↓ 解决思路 ↓**************************************/
for(i=0;i<4;i++)
{
m = 0; /* m是该行的第一个 */
for(j=0;j<5;j++) /* 从第一个比较到最后一个 */
{
if(a[i][m] < a[i][j]) /* 每行求出最大,m就是最大数的下标 */
{
m = j;
}
}
/* n是当前行 */
n = i;
for(int k=0;k<4;k++) /* m是该行最大数的下标,比较看a[n][m]是否是本列最小的数,如果是就是"鞍点" */
{
if(a[n][m] > a[k][m])
{
n = -1; // 不等于i就行
break;
}
}
if( i == n) // m是第i行最大的数,如果i=n则证明此数在第m列上最小,为"鞍点"
{
printf("鞍点为:%d,行列坐标为:第%d行第%d列\n",a[n][m],n+1,m+1);
}
else
{
printf("第%d行无鞍点\n",i+1);
}
}
/**************************************↑ 解决思路 ↑**************************************/
return 0;
}