3 Star 14 Fork 6

徒步天下 / 程序设计与算法一OpenJudge题解

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
032:计算鞍点.md 1.81 KB
一键复制 编辑 原始数据 按行查看 历史
徒步天下 提交于 2017-09-14 10:44 . 新建 032:计算鞍点.md

032:计算鞍点

总时间限制: 1000ms 内存限制: 65536kB

描述

给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。
鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。
例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 2
15 10 11 20 25

输入

输入包含一个5行5列的矩阵

输出

如果存在鞍点,输出鞍点所在的行、列及其值,如果不存在,输出"not found"

样例输入

11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8  6 4 7 2
15 10 11 20 25

样例输出

4 1 8

全局题号

2671

题解

#include <cstdio>
#include <iostream>

using namespace std;

int main()
{
    int a[6][6], b, found=0;

    //读入矩阵数组
    for (int i=0;i<5;i++)
        for (int j=0;j<5;j++)
            cin >> a[i][j];

    //初始化各行、列极值
    for (int i=0;i<5;i++)
    {
        a[i][5]=0;
        a[5][i]=0;
    }

    // 计算每行的最大值,并将列号放到a[i][5]
    for (int i=0;i<5;i++)
    {
        for (int j=1;j<5;j++)
        {
            if (a[i][j]>a[i][a[i][5]])
                a[i][5]=j;
        }
    }

    // 计算每列的最小值,并将行号放到a[5][j]
    for (int j=0;j<5;j++)
    {
        for (int i=1;i<5;i++)
        {
            if (a[i][j]<a[a[5][j]][j])
                a[5][j]=i;
        }
    }

    // 查看是否为鞍点
    for (int i=0;i<5;i++)
        if (a[5][a[i][5]]==i)
        {
            printf("%d %d %d\n", i+1, a[i][5]+1, a[i][a[i][5]]);
            found = 1;
        }
    if (found==0)
        printf("not found");
    return 0;
}
C++
1
https://gitee.com/se17a/c01.git
git@gitee.com:se17a/c01.git
se17a
c01
程序设计与算法一OpenJudge题解
master

搜索帮助