我是靠谱客的博主 愉快墨镜,最近开发中收集的这篇文章主要介绍【计算鞍点】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

描述

给定一个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

解析:

要求的是每行的最大值且是当列的最小值,可以先分别求出每行的最大值和每列的最小值,再进行匹配判断。

【存在更优解吗?留待之后探索】

代码:

#include <iostream>
using namespace std;

int main()
{
    int a[6][6];
    for( int i=1; i<=5; i++ )
        for( int j=1; j<=5; j++ )
            cin >> a[i][j];
    
    int max[6], min[6];
    int maxh, minl;
    for( int i=1; i<=5; i++ )
    {
        maxh = a[i][1];
        for( int j=2; j<=5; j++ )
        {
            if( a[i][j] > maxh )
                maxh = a[i][j];
        }
        max[i] = maxh;
    }
    
    for( int j=1; j<=5; j++ )
    {
        minl = a[1][j];
        for( int i=2; i<=5; i++ )
        {
            if( a[i][j] < minl )
                minl = a[i][j];
        }
        min[j] = minl;
    }
    
    int flag = 0;
    for( int i=1; i<=5; i++ )
    {
        for( int j=1; j<=5; j++ )
        {
            if( a[i][j] == max[i] && a[i][j] == min[j] )
            {    
                cout << i << " " << j << " " << a[i][j];
                flag = 1;
            }
        }
    }
    if( flag == 0 )
        cout << "not found" << endl;
    
    return 0;
}

注意:

开数组的大小——数组下标默认从0开始,但是需要输出的下标从1开始,数组需要开大一点,防止越界。

最后

以上就是愉快墨镜为你收集整理的【计算鞍点】的全部内容,希望文章能够帮你解决【计算鞍点】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部