鞍點(中國大學MOOC)(C語言)
阿新 • • 發佈:2019-01-08
題目內容:
給定一個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
給定一個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() { 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; }