题目描述
找出具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10。
输入
输入数据有多行,第一行有两个数m和n,下面有m行,每行有n个数。
输出
按下列格式输出鞍点:
Array[i][j]=x
其中,x代表鞍点,i和j为鞍点所在的数组行和列下标,我们规定数组下标从0开始。
一个二维数组并不一定存在鞍点,此时请输出None。
我们保证不会出现两个鞍点的情况,比如:
3 3
1 2 3
1 2 3
3 6 8
Array[i][j]=x
其中,x代表鞍点,i和j为鞍点所在的数组行和列下标,我们规定数组下标从0开始。
一个二维数组并不一定存在鞍点,此时请输出None。
我们保证不会出现两个鞍点的情况,比如:
3 3
1 2 3
1 2 3
3 6 8
示例输入
3 3 1 2 3 4 5 6 7 8 9
示例输出
Array[0][2]=3
之前的有点错误,现在纠正,如果一行有好多重复最大值,那么把他们保存在一个数组中,
逐一判断,只要有符合的就输出就可以了。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int main()
{
int n,m;
int a[12][12];
while(~scanf("%d%d",&n,&m))
{
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
cin>>a[i][j];
}
}
int max,flog;
for(int i=0; i<n; i++)
{
max=a[i][0];
int remark[15];
int y=0,p=0;
for(int j=0; j<m; j++)
{
if(a[i][j]>max)
{
max=a[i][j];
}
}
for(int l=0;l<m;l++)
{
if(max==a[i][l])
{
remark[p]=l;
p++;
}
}
for(int l=0;l<p;l++)
{
flog=1;
y=remark[l];
for(int k=0; k<n; k++)
{
if(max>a[k][y])
{
flog=0;
break;
}
}
if(flog==1)
break;
}
if(flog==1)
{
printf("Array[%d][%d]=%d\n",i,y,max);
break;
}
}
if(flog==0)
{
printf("None\n");
}
}
return 0;
}