找出一個二維陣列中的鞍點,即該位置上的元素在該行上最大,在該列上最小,也可能沒有鞍點
阿新 • • 發佈:2020-07-27
找出一個二維陣列中的鞍點,即該位置上的元素在該行上最大,在該列上最小,也可能沒有鞍點
【答案解析】
鞍點是行上最大,列上最小的元素,因此對陣列的第i元素進行如下操作:
- 找到該行上最大元素,用max標記,並標記該元素所在列colindex
- 找colindex列上最小的元素,用min標記,並標記該元素所在行號rowindex
- 如果max和min相等,並且最小的元素剛好是在第i行,則為鞍點
如果所有行找完了,沒有輸出則沒有鞍點
【程式碼實現】
#include<stdio.h> #define M 3 #define N 4 int main() { int max, min, rowindex, colindex, flag = 0; int array[M][N]; printf("請輸入%d行%d列的陣列:\n", M, N); for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) scanf("%d", &array[i][j]); } for (int i = 0; i < M; ++i) { // 找到i行上最大的元素,記錄該元素在列號colindex max = array[i][0]; for (int j = 0; j < N; ++j) { if (array[i][j] > max) { max = array[i][j]; colindex = j; } } // 找max所在列colindex上最小的元素,並記錄其所在的行 min = array[0][colindex]; for (int j = 0; j < M; ++j) { if (array[j][colindex] < min) { min = array[j][colindex]; rowindex = j; } } // 如果最小元素與最小元素相同,並且最小元素也在第i行,則為鞍點 if (max == min && i == rowindex) { flag = 1; printf("鞍點為:%d行%d列的元素%d", rowindex, colindex, max); break; } } if (0 == flag) printf("沒有鞍點"); return 0; }
【結果截圖】