Problem Description
找出具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10。同一行和同一列没有相同的数。
Input
输入数据有多行,第一行有两个数m和n,下面有m行,每行有n个数。
Output
按下列格式输出鞍点:
Array[i][j]=x
其中,x代表鞍点,i和j为鞍点所在的数组行和列下标,我们规定数组下标从0开始。
一个二维数组并不一定存在鞍点,此时请输出None。
我们保证不会出现两个鞍点的情况,比如:
3 3
1 2 3
1 2 3
3 6 8
Sample Input
3 3
1 2 3
4 5 6
7 8 9
Sample Output
Array[0][2]=3
/*首先是确定一行然后用这样的第一个数字去对比这一行里其他的数字如果符合要求计数加一,
以此类推,
然后列也是这样,最后输出时检查下计数的个数是不是等于行列数,
因为每行都有最大每列都有最小,如果和行列的数相等则代表成功可以输出。*/
#include<iostream>
using namespace std;
int main()
{
int i,j,k,m,n;
int d,x,b=0;
int a[10][10];
cin>>m>>n;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cin>>a[i][j];
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
d=0,x=0;
for(k=0;k<n;k++)
{
if(a[i][j]>=a[i][k])
d++;
}
for(k=0;k<m;k++)
{
if(a[i][j]<=a[k][j])
x++;
}
if(d==n&&x==m)
{
cout<<"Array["<<i<<"]["<<j<<"]="<<a[i][j]<<endl;
b++;
}
}
}
if(b==0)
cout<<"None"<<endl;
return 0;
}
这题借鉴了大佬的思路,顺着大佬的代码做的,权当是练习循环了。。。。?
大佬连接https://blog.youkuaiyun.com/ccblogger/article/details/77294367