1. 程式人生 > 其它 >課本第六章-8 鞍點-陣列

課本第六章-8 鞍點-陣列

技術標籤:c語言ACM

找出一個二維陣列中的鞍點,即該位置上的元素在該行上最大、在該列上最小。也可能沒有鞍點。

Input
輸入第一行為兩個正整數n,m。(1≤n,m≤100)接下來輸入n∗m的二維陣列。

Output
如果有鞍點,則輸出鞍點的座標(x,y)。
如果沒有,則輸出 “No”。

Sample Input
3 3
1 2 3
4 5 6
7 8 9

4 5
1 2 3 4 20
6 7 8 9 11
11 12 13 14 12
16 17 18 19 13

Sample Output
1 3
2 5

#include <stdio.h>
#include "string.h"
int main() { int i, j, n, m; int a[100][100]; scanf("%d%d", &n, &m); for(i = 0; i < n; i++) for(j = 0; j < m; j++) scanf("%d", &a[i][j]); int b[100]; int max; for(i = 0; i < n; i++) { max = a[i][0]; b[
i] = 0; for(j = 0; j < m; j++) { if(max < a[i][j]) { max = a[i][j]; b[i] = j; } } //用b[i]記錄每一行最大的j } //再檢測每一行最大值是否是每一列最小值 //第i行最大值就是a[i][b[i]] int k, s = 0; for(i = 0; i < n; i++
) { k = 0; for(j = 0; j < n; j++) { if(a[i][b[i]] >= a[j][b[i]] && i != j) { k++;//k來記錄有沒有不成立的點 break; } } if(k == 0) { printf("%d %d", i + 1, b[i] + 1); s++;//s記錄有沒有鞍點 } } if(s == 0) printf("No"); }