问题标题: 酷町堂:2554 行最小列最大

1
1
已解决
毛润宇
毛润宇
新手天翼
新手天翼

题目描述 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;
}

第一个数对了,剩下就不会了,请大佬指教如何输出行数与列数的代码


0
已采纳
徐睿涵
徐睿涵
初级守护
初级守护

首先你定义的b数组赋初值是每一列的第一个数字,C数组赋初值是每一行的第一个数字,然后你在进行比较的时候,行和列弄反过来了,所以肯定不对,或者你赋初值时候反过来也行啊,另外你比较替换的时候else b[i]=b[i],c[j]=c[j]完全没必要啊,只要找到最大和最小值就行了,不需要这个else,其他应该没有毛病,主要就是行和列的初值那边和下面的比较是反的,你读一下程序就应该可以看出来

0
0
0
傅文彬
傅文彬
新手天翼
新手天翼

找出来每一行的最小值,用b数组记录。

再找出每一列的最大值,用c数组记录。

然后两重循环,记录b[i]是否等于c[j],如果相等,则输出,并用flag记录为true。

如果到最后依旧flag依旧为false,则输出N。

我要回答