1. 程式人生 > >鞍點(中國大學MOOC)(C語言)

鞍點(中國大學MOOC)(C語言)

題目內容
給定一個n*n矩陣A。矩陣A的鞍點是一個位置(i,j),在該位置上的元素是第i行上的最大數,第j列上的最小數。一個矩陣A也可能沒有鞍點。
你的任務是找出A的鞍點。

輸入格式:
輸入的第1行是一個正整數n, (1<=n<=100),然後有n行,每一行有n個整數,同一行上兩個整數之間有一個或多個空格。

輸出格式:
對輸入的矩陣,如果找到鞍點,就輸出其下標。下標為兩個數字,第一個數字是行號,第二個數字是列號,均從0開始計數。
如果找不到,就輸出   NO
題目所給的資料保證了不會出現多個鞍點。

輸入樣例:

1 7 4 1 
4 8 3 6 
1 6 1 2 

0 7 8 9

輸出樣例:

2 1

#include<stdio.h>
int main()
{
	const int size = 100;
	int n;
	int arr[size][size];
	scanf("%d",&n);
	for(int i=0;i<n;i++)			//讀入資料 
		for(int j=0;j<n;j++)
			scanf("%d",&arr[i][j]);
	
	for(int i=0;i<n;i++){			//逐行迴圈 
		int maxNum = 0;
		int minFlag = 1;			//判斷該數是否為該列最小 
		for(int j=0;j<n;j++){		//找行最大值 
			if(arr[i][j]>arr[i][maxNum])
				maxNum = j;
		}	
		for(int k=0;k<n;k++){
			if(arr[k][maxNum]<arr[i][maxNum])
				minFlag = 0;
		}
		if(minFlag==1){				//滿足條件,輸出 
			printf("%d %d",i,maxNum);
			return 0;				//題目規定只有一個鞍點 
		}		
	}
	printf("NO");					//迴圈結束還沒有結果就是不滿足 
	return 0;
}