首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言二維陣列練習:行極值的極值 (Saddle Point 思想)

     編輯:關於C語言

題目要求

給定 n×n 整數矩陣:

  1. 先從每行找**最大值**,再從這 n 個最大值中找**最小值** (min of row max)
  2. 再從每行找**最小值**,再從這 n 個最小值中找**最大值** (max of row min)

完整 C 程式

#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 初始化,避免假設資料範圍
  • 單層迴圈即可完成行極值計算,無需額外儲存
  • 若矩陣極大,可邊讀邊算,不必完整存入記憶體
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved