codeup22109 马鞍数
时空限制 1000ms/128MB
题目描述
马鞍数,是指数阵n*m中在行上最小而在列上最大的数。如:数阵n*m,其中 n=5 m=5
1 6 7 8 9
4 5 6 7 8
3 4 5 2 1
2 3 4 9 0
5 6 7 6 8
则第5行第1列的数字“5”即为该数阵的一个马鞍数。
(注意:行上最小数在一行中可能有多个哦,都需判断是否为马鞍数)
输入
第一行两个用空格隔开的自然数n与m,表示n行m列,n,m<=100;
接下来n行每行有m个用空格隔开的整数(最大不超过 32767)。
输出
输出若干行:如果存在马鞍数,则输出所有马鞍数,每行一个,为行和列以及马鞍数。
如果不存在马鞍数,则输出'no find'。
样例输入
5 5
5 6 7 8 9
4 5 6 7 8
3 4 5 2 1
2 3 4 9 0
1 2 5 4 8
样例输出
1 1 5
代码
#include<iostream>
using namespace std;
const int N = 105;
int n,m,a[N][N],maxi[N],mini[N];
int main(){
cin>>n>>m;
for (int i=1; i<=n; i++)
for (int j=1; j<=m; j++) cin>>a[i][j];
for (int i=1; i<=n; i++){ //每行最小值
mini[i] = a[i][1];
for (int j=2; j<=m; j++)
if (mini[i]>a[i][j]) mini[i]=a[i][j];
}
for (int j=1; j<=m; j++){ //每列最大值
maxi[j] = a[1][j];
for (int i=2; i<=n; i++)
if (maxi[j]<a[i][j]) maxi[j]=a[i][j];
}
int cnt=0; //计数
for (int i=1; i<=n; i++)
for (int j=1; j<=m; j++)
if (a[i][j]==mini[i] && a[i][j]==maxi[j]){
cout<<i<<" "<<j<<" "<<a[i][j]<<endl;
cnt++;
}
if (!cnt) cout<<"no find\n";
return 0;
}