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

PAT 甲級 08-2:矩陣局部極大值查找(邊界處理與輸出順序)

     編輯:關於C語言

題目定義

  • M×N 整數矩陣(3≤M,N≤20)
  • 非邊界元素 A[i][j] 若大於上下左右四鄰居,則為局部極大值
  • 輸出格式:值 行 列(1-based),按行優先、列遞增序
  • 無極大值輸出 None M N

算法邏輯

  1. 讀入矩陣
  2. 遍歷 i=1..M-2, j=1..N-2(跳過邊界)
  3. 四向比較:a[i][j] > a[i-1][j] && > a[i+1][j] && > a[i][j-1] && > a[i][j+1]
  4. 滿足即輸出,標記 found=true
  5. 結束後若 !found 輸出 None

代碼實現

#include <stdio.h>
#include <stdbool.h>

void findLocalMax(int M, int N) {
    int a[20][20];
    for (int i=0; i a[i-1][j] && a[i][j] > a[i+1][j] &&
                a[i][j] > a[i][j-1] && a[i][j] > a[i][j+1]) {
                printf("%d %d %d\n", a[i][j], i+1, j+1);
                found = true;
            }
        }
    }
    if (!found) printf("None %d %d\n", M, N);
}

int main() {
    int M, N; scanf("%d%d", &M, &N);
    findLocalMax(M, N);
    return 0;
}

關鍵細節

  • 遍歷順序天然滿足「行遞增、同行列遞增」輸出要求
  • 邊界不參與判斷,i=1..M-2 對應第 2 行到倒數第 2 行
  • bool 需 stdbool.h(C99)
  • 樣例 2 中 9 3 9 9 中間 3 不大於左右 9,故無極大值

複雜度

O(M×N) 時間,O(M×N) 空間,規模極小無壓力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved