首页 新闻 赞助 找找看

计算鞍点求解

0
悬赏园豆:50 [待解决问题]

描述
给定一个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"。

输入样例 1

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
输出样例 1

4 1 8

knbit的主页 knbit | 初学一级 | 园豆:152
提问于:2020-09-13 11:46
< >
分享
所有回答(2)
1

include<iostream>

using namespace std;
int main()
{
int a[5][5], max, t, count;
bool flag = false;
cout<<"请输入5x5数组的数值:"<<endl;
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++) {
count = 0;//记录是否为本列的最大值
t = 0;//记录本行最大值所在列的下标
max = a[i][0];//记录最大值,首先赋值为本行的第一列的值
for(int j = 1; j < 5; j++) {//从第二列的值开始判断
if (a[i][j] > max) {//如果大于当前最大值
max = a[i][j];//赋值最大值
t = j;//赋值本行最大值所在列的下标
}
}
for(int z = 0; z < 5; z++) {//判断最大值所在列是否为本列最小值
if(max > a[z][t]) {//如果最大值大于某一个数字
count++;//count+1,表示本行最大值在本列中不是最小值
break;//跳出当前循环
}
}
if (count == 0) {//如果count=0,表示本行最大值在本列是最小值
cout<<i+1<<" "<<t+1<<" "<<max<<endl;//输入行、列和鞍点值
flag = true;//设置flag为true,表示存在鞍点
}
}
if(!flag) {//如果flag为false,表示没有鞍点
cout<<"无鞍点"<<endl;
}
return 0;
}

执行结果:

编程小大白 | 园豆:530 (小虾三级) | 2020-09-13 18:12
0

细节!厉害呢小哥哥

皮皮蛇 | 园豆:202 (菜鸟二级) | 2020-09-23 08:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册