为什么有些数据结果错误啊
输入描述输入数据有多行,第一行有两个数m
和n
,下面有m
行,每行有n
个数。
输出描述
按下列格式输出鞍点:
i
j
x
其中,x
代表鞍点,i
和j
为鞍点所在的数组行和列下标,我们规定数组下标从0开始。
一个二维数组并不一定存在鞍点,此时请输出None。
样例
输入 复制
3 3
1 2 3
4 5 6
7 8 9
输出 复制
0 2 3
提示
1≤m,n≤10
。数据中的元素在int范围内
提示:可能存在多个鞍点,请在每一行输出一个。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,m,n;int flag1=0;
cin>>m>>n;
int i,j,k;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>a;
for(i=0;i<m;i++)
{
int max=a;int l=0;
for(j=0;j<n;j++)
{
if(a>max)
{
max=a;
l=j;
}
}
int flag=0;
for(k=0;k<m;k++)
{
if(a<max) {flag=1;break;}
}
if(!flag)
{
flag1=1;cout<<i<<' '<<l<<' '<<max<<endl;
}
}
if(!flag1) cout<<"None";
} 这段代码的问题在于它只考虑了每行中的最大值,但没有考虑每列的最小值。鞍点的定义是在数组中找到一个元素,它是所在行的最大值,同时也是所在列的最小值。因此,我们需要在代码中加入对每列最小值的判断。
以下是修改后的代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,m,n;
int flag1=0;
cin>>m>>n;
int i,j,k;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>a[ i];
for(i=0;i<m;i++)
{
int max=a[ i];
int l=0;
for(j=0;j<n;j++)
{
if(a[ i]>max)
{
max=a[ i];
l=j;
}
}
int flag=0;
for(k=0;k<m;k++)
{
if(a<max) {
flag=1;
break;
}
}
if(!flag)
{
int min_in_col = a;
int row_index = 0;
for (int p = 1; p < m; p++) {
if (a < min_in_col) {
min_in_col = a;
row_index = p;
}
}
if (row_index == i) {
flag1=1;
cout<<i<<' '<<l<<' '<<max<<endl;
}
}
}
if(!flag1) cout<<"None";
}
页:
[1]