鞍點問題
阿新 • • 發佈:2018-12-05
題目內容:
給定一個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
#include<stdio.h> int main() { int n; scanf("%d",&n); int a[n][n]; for( int i=0; i<n; i++ ){ for( int j=0; j<n; j++ ){ scanf("%d",&a[i][j]); } } int max[n]; int min[n]; for( int row=0; row<n; row++ ){ //求每一行上的最大值 max[row] = a[row][0]; for( int col=1; col<n; col++ ){ if( a[row][col] > max[row] ){ max[row] = a[row][col]; } } } for( int col=0; col<n; col++ ){ //求每一列上的最小值 min[col] = a[0][col]; for( int row=1; row<n; row++ ){ if( a[row][col] < min[col] ){ min[col] = a[row][col]; } } } int ans = 0; for( int row=0; row<n; row++ ){ for( int col=0; col<n; col++ ){ if( max[row] == min[col] ){ printf("%d %d\n",row,col); ans = 1; } } } if( !ans ){ printf("NO\n"); } return 0; }