刷到一个鞍点的题目,感觉很简单但是只对50%
测试代码:
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
system("color 3");
int m,n,test=1;
cin>>m>>n;
int number[m][n];
for(int i=0;i<m;++i)
{
for(int j=0;j<n;++j)
{
cin>>number[i][j];
}
}
for(int i=0;i<m;++i)
{
int max=number[i][0];//第一个不断比较拿出最大值,行
for(int j=1;j<n;++j)
{
if(max<number[i][j])
{
max=number[i][j];//换出最大值
}
}
for(int k=0;k<n;++k)//对应列 k记住
{
if(number[i][k]==max)//匹配最大值
{
int min=max;//比较该值是否为列的最小值
int flag=1;//标记
for(int loc=0;loc<m;++loc)//列比较
{
int temp=number[loc][k];//列值
if(min>temp)//不是最小值
{
flag=0;//标记为0
// cout<<"NO"<<endl;
break;
}
}
if(flag)
{
test=0;//存在标志
cout<<i+1<<" "<<k+1<<" "<<min<<endl;//存在鞍点并且打印 ,下标从0开始要加一
}
else{
break;//不是跳出这一行不存在
}
}
}
//走完每一行中所有元素
}
if(test)
{
cout<<"NO"<<endl;//不存在
}
return 0;
}
但是只是对一半