问题描述
求一个n×n(n<=10)矩阵中的马鞍数(马鞍数的特点是在它所在的行,它的值最小。在它所在的列,它的值最大)
矩阵中的数字都不超过100的非负整数。
输入格式
第一行一个整数n
接下来是一个n*n的矩阵,用空格作为间隔
输出格式
一行三个空格间隔的整数,表示马鞍数所在的位置坐标和对应的数值
样例输入 1
3
1 4 8
6 7 9
5 1 3
样例输出 1
2 1 6
样例输入 2
5
9 6 2 11 6
14 14 6 8 10
7 7 5 9 3
3 7 4 9 8
3 6 4 5 4
代码
#include<iostream>
using namespace std;
int a[11][11];
int main()
{
int n;
cin>>n;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
cin>>a[i][j];
for(int i = 1; i <= n; i++) // 处理每一行,i为行号,这里行号从1开始
{
int min = a[i][1];
for(int j = 1; j <= n; j++)
{
if(a[i][j] < min)
min = a[i][j]; //找出最小值
}
for(int j = 1; j <= n; j++)
{
if(a[i][j] == min) //最小值可能不止一个,所以出现一个最小值就检查它是否是该列的最大元素
{
int flag = 1; //flag用来记录该值是否是该列的最大值
for(int k = 1; k <=n; k++)
{
if(a[k][j] > min)
flag = 0; //如果该列有数比该数大,则说明该数不是该列的最小值,flag置0
}
if(flag == 1)
cout<<i<<" "<<j<<" " << min <<endl;
}
}
}
}