Description
由键盘输入一个3*4(3行4列)的矩阵,输出矩阵中的鞍点(即在矩阵行中最大,列中最小的数)。
若没有鞍点,输出“NO”字样。
输入样例
87 90 110 98
70 97 210 65
98 45 120 30
输出样例
110
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[3][4], i, j, k;
int flag = 0;//先假定二维数组没有鞍点。
int col;
for(i = 0; i<3; i++)
for(j = 0; j<4; j++)
{
scanf("%d", &a[i][j]);
}
for(i = 0; i<3; i++)
{
col = 0;//假设第一行第一列的数组最大。
for(j = 1; j<4; j++)
{
if(a[i][j]>a[i][col])
col = j;
}
//找到每行最大的元素a[i][col]。
for(j = 0; j<4; j++)
{
if(a[i][j] == a[i][col])//定位每行最大的元素在第几列。
{
for(k = 0; k<3; k++)//循环判断每一行最大的数是不是该列最小。
if(a[k][j]<a[i][j])
break;
//一旦找到比a[i][col]更小的数,立即终止循环,并执行到了末尾。
if(k == 3)
{
printf("%d\n",a[i][col]);
flag = 1;
}//执行完循环,则a[i][j]为鞍点。
}
}
}
if(flag != 1)
printf("NO\n");
return 0;
}
标程:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,a[3][4],flag,col;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)
{
col=0;
for(j=1;j<4;j++)
if(a[i][j]>a[i][col]) col=j;
flag=1;
for(j=0;j<3;j++)
if(a[j][col]<=a[i][col] && j!=i) flag=0;
if(flag==1)
{
printf("%d", a[i][col]);
return 0;
}
}
printf("NO\n");
return 0;
}