描述
给定一个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
限制
时间限制: 1000 ms
内存限制: 65536 KB
#include <stdio.h>
#define num 5
int main()
{
int arr[num][num];
int index[5]; // 记录每行最大的索引 索引代表行号 数值代表列号
int i,j,max,min,state,l;
for(i = 0;i<num;i++)
for(j = 0;j<num;j++)
scanf("%d",arr[i]+j);
for(i = 0;i<num;i++){ // 定行扫列 找行最大
max = arr[i][0];
index[i] = 0;
for(j = 1;j<num;j++){
if(arr[i][j]>max){
max = arr[i][j];
index[i] = j;
}
}
}
state = 0; //默认是没有鞍点的
for(i = 0;i<num;i++){ // 定列扫行 找列最小
int p = 1;
l = index[i];
min = arr[i][l];
for(j = 0;j<num;j++){
if(arr[j][l]<min){
p = 0;
break;
}
}
if(p){
printf("%d %d %d",i+1,l+1,arr[i][l]);
state = 1;
}
}
if(!state)printf("not found");
return 0;
}