給定 n×n 整數矩陣:
n 個最大值中找**最小值** (min of row max)n 個最小值中找**最大值** (max of row min)#include <stdio.h>
#include <limits.h>
int main(void) {
int n;
printf("請輸入矩陣階數 n: ");
scanf("%d", &n);
int a[100][100]; // 假設 n ≤ 100
printf("請輸入 %d×%d 矩陣元素 (按行):\n", n, n);
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
scanf("%d", &a[i][j]);
// 1. min of row max
int min_of_max = INT_MAX;
for (int i = 0; i < n; ++i) {
int row_max = INT_MIN;
for (int j = 0; j < n; ++j)
if (a[i][j] > row_max) row_max = a[i][j];
if (row_max < min_of_max) min_of_max = row_max;
}
printf("各行最大值中的最小值: %d\n", min_of_max);
// 2. max of row min
int max_of_min = INT_MIN;
for (int i = 0; i < n; ++i) {
int row_min = INT_MAX;
for (int j = 0; j < n; ++j)
if (a[i][j] < row_min) row_min = a[i][j];
if (row_min > max_of_min) max_of_min = row_min;
}
printf("各行最小值中的最大值: %d\n", max_of_min);
return 0;
}
輸入: 3 1 2 3 4 5 6 7 8 9 各行最大值: 3, 6, 9 → 最小值 = 3 各行最小值: 1, 4, 7 → 最大值 = 7 輸出: 各行最大值中的最小值: 3 各行最小值中的最大值: 7
若某元素同時是所在行的最小值、所在列的最大值 (或反之),稱為**鞍點**。本題計算的兩個值若相等,且位於同一位置,即為鞍點。可進一步修改程式輸出鞍點位置。
INT_MAX/INT_MIN 初始化,避免假設資料範圍