描述
给定一个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>
#include<string.h>
int main()
{
int a[6][6];
int i,r0=0,r1=0,r2=0,r3=0,r4=0,l0=0,l1=0,l2=0,l3=0,l4=0,j,flag=0;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
scanf("%d",&a[i][j]);
}
}
int r[]={r0,r1,r2,r3,r4};
int l[]={l0,l1,l2,l3,l4};
for(j=0;j<5;j++)
{
for(i=1;i<5;i++)
{
if(a[j][i]>a[j][r[j]])
{
r[j]=i;
}
}
}
for(j=0;j<5;j++)
{
for(i=1;i<5;i++)
{
if(a[i][j]<a[l[j]][j])
{
l[j]=i;
}
}
}
for(i=0;i<5;i++)
{
if(l[r[i]]==i)
{
printf("%d %d ",i+1,r[i]+1);
printf("%d",a[i][r[i]]);
flag=1;
}
}
if(flag==0)
{
printf("not found");
}
return 0;
}