新手天翼
题目描述 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
此处是我25分代码:
#include<iostream> using namespace std; int a[100][100],b[100]; int main() { int n,t=0,min; cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j]; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { b[i]=a[1][j]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(b[i]>a[i][j]) b[i]=a[i][j]; else b[i]=b[i]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(b[i]>a[i][1]) { cout<<b[i]<<" "<<a[i]<<" "<<a[j]; t++; } } } if(t==0) cout<<"N"; return 0; }
指明哪里错了,正确的是什么,不要完整代码。
请大佬解答。
毛润宇在2019-02-27 18:02:37追加了内容
在线等,求大佬尽快解答,谢谢!
毛润宇在2019-02-27 19:38:24追加了内容
看这个代码:
#include<iostream>
using namespace std;
int a[100][100],b[100],c[100],d[100][100];
int main()
{
int n,t=0;
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
b[i]=a[1][i];
for(int j=1;j<=n;j++)
c[j]=a[j][1];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(b[i]>a[i][j])
b[i]=a[i][j];
else
b[i]=b[i];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(c[j]<a[i][j])
c[j]=a[i][j];
else
c[j]=c[j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(b[i]==c[j])
{
cout<<a[i][j];
t++;
}
}
}
if(t==0)
cout<<"N";
return 0;
}
第一个数对了,剩下就不会了,请大佬指教如何输出行数与列数的代码
初级守护
首先你定义的b数组赋初值是每一列的第一个数字,C数组赋初值是每一行的第一个数字,然后你在进行比较的时候,行和列弄反过来了,所以肯定不对,或者你赋初值时候反过来也行啊,另外你比较替换的时候else b[i]=b[i],c[j]=c[j]完全没必要啊,只要找到最大和最小值就行了,不需要这个else,其他应该没有毛病,主要就是行和列的初值那边和下面的比较是反的,你读一下程序就应该可以看出来