概述
描述
给定一个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开始,数组需要开大一点,防止越界。
最后
以上就是愉快墨镜为你收集整理的【计算鞍点】的全部内容,希望文章能够帮你解决【计算鞍点】所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复