Description
求一个 n x n 矩阵中的马鞍数。马鞍数的特点是在它所在的行,它的值严格最小。在它所在的列,它的值严格最大。
Input
第一行一个整数 n(2<= n <= 50)。
接下来 n 行,每行 n 个空格隔开的整数(均在 int 范围内),表示矩阵。
Output
如果不存在马鞍数,那么输出"NULL"(不含引号,注意大小写)。
如果存在,那么输出三个空格隔开的正整数 x,y,v,分别表示马鞍数所在行、列(从 1 开始编号),和其数值。
很容易证明马鞍数要么不存在,要么存在仅一个。
Sample Input
3
1 4 8
6 7 9
5 1 3
Sample Output
2 1 6
Code
#include<stdio.h>
int main ()
{
int n,a[50][50],x=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){//这两个for循环是用来历遍整个矩阵的每一个元
int count=0, flag=0;
for(int k=0;k<n;k++){//判断列
if(a[i][j]>=a[k][j]);
else{
count++;//如果count非零证明这个元在列并非绝对最大
break;
}
}
if(count==0){
for(int h=0;h<n;h++){
if(a[i][j]<=a[i][h]);//判断行
else{
flag++;//如果flag非零证明这个元在行并非绝对最小
break;
}
}
}
if(count==0&&flag==0){//如果count和flag 说明这个元符合题意 输出
printf("%d %d %d",i+1,j+1,a[i][j]);
x++;
break;
}
}
}
if(x!=0);//这里意思是如果x不为零 他就什么都不做
else printf("NULL");
return 0;
}