課本第六章-8 鞍點-陣列
阿新 • • 發佈:2020-12-15
找出一個二維陣列中的鞍點,即該位置上的元素在該行上最大、在該列上最小。也可能沒有鞍點。
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");
}