题目:由键盘输入一个3*4(3行4列)的矩阵,输出矩阵中的鞍点(即在矩阵行中最大,列中最小的数)。若没有鞍点,输出“NO”字样。
输入样例
87 90 110 98
70 97 210 65
98 45 120 30
输出样例
110
【分析】行号i: 0-2;列号j:0-3;
解决方式:
1.找出每行最大值
2.找出最大值所对应的的列中,这个值是否为该列最小值;如果是,那么为鞍点。
3.每行都没有鞍点,该矩阵木有鞍点
实现步骤:
行号for循环i=0 to 2
列号j循环:找出该行最大值
把最大值所在列号给colum,并把最大值给max
for行号循环:找出max所在的列中的最小值
把最小值给min,并记录此时行号在row
如果max==min,则输出鞍点a[row][col],break进入下一个行号的大循环
如果大的for循环结束后,依旧max不等于min
则,没有鞍点
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[3][4];
int i,j,k,max,min;
int row=0,col=0;//row行的意思,colum列的意思
for(i=0;i<3;i++)//键入数组的循环
{
for(j=0;j<4;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<3;i++)//对比大小
{
max=a[i][0];//每一行取最大的数,先把初始max全给首列元素
for(j=0;j<4;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
col=j;//找出每一行当中最大的数
}
}
min=a[0][col];//将刚刚找出的行最大的那个数所属的列进行对比
for(k=0;k<3;k++)
{
if(min>a[k][col])
{
min=a[k][col];
row=k;
}
}
if(max==min)
{
printf("%d\n",a[row][col]);
break;
}
}
if(min!=max) printf("NO");
return 0;
}
终于写完,发出努力学习的声音~ 吧唧~