2087: 矩陣鞍點

湯米先生發表於2020-11-28

2087: 矩陣鞍點

1.描述

給定一個n*n矩陣A。矩陣A的鞍點是一個位置(i,j),在該位置上的元素是第i行上的最大數,第j列上的最小數。一個矩陣A也可能沒有鞍點。
你的任務是找出A的鞍點。
輸入
輸入的第1行是一個正整數n, (1<=n<=100),然後有n行,每一行有n個整數,同一行上兩個整數之間有一個或多個空格。
輸出
對輸入的矩陣,如果找到鞍點,就輸出其下標。下標為兩個數字,第一個數字是行號,第二個數字是列號,均從0開始計數。
如果找不到,就輸出
NO
題目所給的資料保證了不會出現多個鞍點。
樣例輸入
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
樣例輸出
2 1

2.程式碼

#include<stdio.h>
#include<math.h>
int main()
{
    int n,m,i,j,max,min,x,y,b[101][101]= {0};
    scanf("%d",&n);
    int a[n][n];
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0; i<n; i++)
    {
        max=a[i][0];
        for(j=0; j<n; j++)
        {
            if(a[i][j]>=max)
            {
                max=a[i][j];
                x=i;
                y=j;
            }
        }
        b[x][y]++;
    }

    for(j=0; j<n; j++)
    {
        min=a[0][j];
        for(i=0; i<n; i++)
        {
            if(a[i][j]<=min)
            {
                min=a[i][j];
                x=i;
                y=j;
            }

        }
        b[x][y]++;
    }
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            if(b[i][j]==2)
            {
                printf("%d %d",i,j);
            }
        }
    }
    return 0;
}

相關文章