0
已解决
2554 行最小列最大
题目描述 Description
给一个n*n的矩阵,每行只有一个最小值,每列只有一个最大值,请你寻找这个矩阵中的某个元素,它既是所在行的最小值也是所在列的最大值。如果该矩阵中没有某个元素满足时行最小值且是列最大值,则输出“N”。
输入描述 Input Description
第一行:n,1<n<10
接下来n行:n*n的矩阵
输出描述 Output Description
如果找到了某个元素值既是行最小值又是列最大值,则输出该元素的值,第几行,第几列
如果没有找到这样的元素则输出N
样例输入 Sample Input
5
11 12 10 8 15
3 4 5 6 10
5 7 6 4 11
6 8 9 7 20
9 10 11 2 25
样例输出 Sample Output
8 1 4
错误代码(Wrong Answer:50分)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int k,n,i2,j2,max,min,a[100][100];
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
max=min=a[1][1];
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(max>a[i][j]){
max=a[i][j];
i2=i;
j2=j;
}
}
for(k=1;k<=n;k++)
if(max<a[k][j2])break;
if(k>n){
cout<<max<<' '<<i2<<' '<<j2<<endl;
return 0;
}
}
cout<<"N"<<endl;
return 0;
}
请问我哪儿错了???
0
已采纳
先找出来每一行的最小值,用b数组记录。
再找出每一列的最大值,用c数组记录。
然后两重循环,记录b[i]是否等于c[j],如果相等,则输出,并用flag记录为true。
如果到最后依旧flag依旧为false,则输出N。
类似题目叫矩阵鞍点,结果被放到队列里面去了。
根据这个思路重构代码吧,你这程序明显有问题。
0
0