鞍点问题
鞍点
Description
找出具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10。
Input
输入数据有多行,第一行有两个数m和n,下面有m行,每行有n个数。
Output
按下列格式输出鞍点: Array[i][j]=x 其中x代表鞍点,i和j为鞍点所在的数组行和列下标,我们规定数组下标从0开始。 一个二维数组并不一定存在鞍点,此时请输出None。 我们保证不会出现两个鞍点的情况,比如:
3 3
1 2 3
1 2 3
3 6 8
Sample Input
3 3
1 2 3
4 5 6
7 8 9
Sample Output
Array[0][2]=3
#include <stdio.h>
int main()
{
int a[11][11],i,j,l=0,k,m,n,max=0,min=0;
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
max=min=a[0][0];
for(i=0;i<m;i++)
{
k=i;max=a[i][0];
for(j=0;j<n;j++)
if(max<a[i][j])
max=a[i][j];
for(j=0;j<n;j++)
{
min=a[i][j];
for(i=0;i<m;i++)
if(a[i][j]<min)
min=a[i][j];
i=k;
if(max==min)
{
printf("Array[%d][%d]=%d",i,j,a[i][j]);
l++;
}
}
}
if(l==0)
printf("None\n");
return 0;
}
2.
如果矩阵A中存在这样的一个元素A[i,j]满足条件:A[i,j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。请编程计算出m*n的矩阵A的所有马鞍点。
Input
输入m,n
然后输入数组中的每个元素
Output
输出m*n的矩阵A的所有马鞍点
Sample Input
3 3
1 7 3
5 4 6
17 18 9
Sample Output
9
#include <stdio.h>
int main()
{
int a[11][11],i,j,k,max,min,l=0,m,n;
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
max=min=a[0][0];
for(i=0;i<m;i++)
{
k=i;
min=a[i][0];
for(j=0;j<n;j++)
if(min>a[i][j])
min=a[i][j];
for(j=0;j<n;j++)
{
max=a[i][j];
for(i=0;i<m;i++)
if(a[i][j]>max)
max=a[i][j];
i=k;
if(max==min)
printf("%d",a[i][j]);
}
}
return 0;
}