鞍点问题

鞍点
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;
}

 

posted @ 2018-03-27 20:05  ~~zcy  阅读(673)  评论(0编辑  收藏  举报