总时间限制:
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
#include <iostream>
using namespace std;
int a[6][6];
int main()
{
//输入数组数据
for (int i=0;i<5;i++)
for (int j=0;j<5;j++)
cin>>a[i][j];
//进行判断
int Max,Min,find=0;
for (int i=0;i<5;i++){//进行行循环
Max=a[i][0]; //初始化最大值为每一行的第一个数
int Max_j=0; //定义如果找到每一行的最大值则其列为Max_j
for(int j=1;j<5;j++){//进行列循环,j从1开始因为j=0那一列默认初始为最大值
if(a[i][j]>Max){//将默认的最大值比较更新
Max=a[i][j];//如果比最大值大就更新最大值
Max_j=j;//同时记录一行最大值的列位置
}
}
Min=a[0][Max_j];//将上面得到每一行的最大值默认为每一列的最小值,再进行每一列的比较
int Min_i=0;//定义如果找到每一列的最小值则其行数为Min_i
for (int k=1;k<5;k++){//开始比较上面求得的行最大是否为列最小
//固定列移动行
if (a[k][Max_j]<Min){
Min=a[k][Max_j];//更新最小值
Min_i=k;//更新最小值所在的列数
}
}
if (Max == Min){//如果找到行最大和列最小是同一个数则完成任务,输出
cout<<Min_i + 1<<" "<<Max_j + 1<<" "<<Max;//行列加1完成叙述
find=1; //表示找到
}
}
if (find == 0) cout<<"not found";
return 0;
}
Openjudge 计算鞍点
于 2022-03-10 17:51:06 首次发布