1051 找矩阵中的鞍点
时间限制:1000MS 代码长度限制:10KB
提交次数:5713 通过次数:1874
题型: 编程题 语言: G++;GCC
Description
由键盘输入一个3*4(3行4列)的数字矩阵,其中任意两个数字均不相同。要求输出该数字矩阵中的鞍点(即在矩阵行中最大,列中最小的数)。 若没有鞍点,输出“NO”字样。
输入样例
87 90 110 98 70 97 210 65 99 45 120 30
输出样例
110
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,col=0,k,a[3][4];//初始认为col=0,即不满足鞍点的条件
for(i=0;i<3;i++)//输入三行四列的数
{
for(j=0;j<4;j++)
{
scanf("%d",&a[i][j]);//注意不要忘记加&
}
}
for(i=0;i<3;i++)//是外循环,三行中一行一行的找
{
k=0;
for(j=1;j<4;j++)//这里的j表示列数
{
if(a[i][j]>a[i][k])//寻找行中的最大值,若一行中后面的数大于第一个数,就代替第一个数
{
k=j;//即行中最大的数为a[i][k]
}
}
col=1;//更新col的值
for(j=0;j<3;j++)
{
if(a[j][k]<=a[i][k]&&j!=i)//注意这里j和i都表示行数,要弄清楚他俩的关系
col=0;//注意这里必须要让col=0,即不能变成if(a[j][k]>a[i][k]&&j!=i);col=1;,因为col的值需要不断更新,前面col已经为1,这里就必须为0
}
if(col==1)//即已经满足鞍点的条件
{
printf("%d",a[i][k]);
return 0;//若有鞍点则输出并结束进程
}
}
printf("NO\n");//若没有鞍点,则输出NO,再结束进程
return 0;
}