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

PAT 基礎級 數組-12:簡易連連看遊戲邏輯模擬

     編輯:關於C語言

題目描述

2N×2N 棋盤,每個大寫字母恰好出現兩次。玩家輸入兩個坐標嘗試匹配:

  • 字母相同且均為大寫 → 匹配成功,兩格變 '*',剩餘字母數 -2
  • 否則 → 輸出 "Uh-oh",錯誤計數 +1
  • 錯誤達 3 次 → 輸出 "Game Over" 結束
  • 所有字母匹配完 → 輸出 "Congratulations!" 結束
  • 每次操作後輸出當前棋盤狀態

核心邏輯實現

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main(void) {
    int N, M;
    scanf("%d", &N);
    int size = 2 * N;
    char board[10][10]; // N≤4 → size≤8
    
    // 讀取棋盤
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            scanf(" %c", &board[i][j]); // 空格跳過換行/空格
        }
    }
    
    scanf("%d", &M);
    int errors = 0;
    int remaining = size * size;
    int x1, y1, x2, y2;
    
    for (int move = 0; move < M; move++) {
        scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
        // 坐標轉 0 基索引
        x1--; y1--; x2--; y2--;
        
        char c1 = board[x1][y1];
        char c2 = board[x2][y2];
        
        // 匹配判定
        if (c1 == c2 && isupper(c1)) {
            board[x1][y1] = board[x2][y2] = '*';
            remaining -= 2;
        } else {
            printf("Uh-oh\n");
            if (++errors == 3) {
                printf("Game Over\n");
                return 0;
            }
        }
        
        // 勝利判定
        if (remaining == 0) {
            printf("Congratulations!\n");
            return 0;
        }
        
        // 輸出棋盤
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                printf("%c%c", board[i][j], j == size-1 ? '\n' : ' ');
            }
        }
    }
    return 0;
}

關鍵點

  1. 坐標系統:題目輸入 1 基索引,內部轉 0 基
  2. 匹配條件:字符相同 且 為大寫字母(isupper),防止 '*' 與 '*' 匹配
  3. 狀態維護:remaining 追蹤未匹配字母數,避免掃描棋盤
  4. 輸入讀取:scanf(" %c", ...) 格式串前空格自動跳過空白字符
  5. 棋盤輸出:每行字符間單空格,行末無空格換行

測試樣例

輸入:
2
A B C D
E F G H
I J K L
M N O P
5
1 1 1 2
1 1 2 1
1 1 3 1
1 1 4 1
1 2 2 2

輸出:
Uh-oh
A B C D
E F G H
I J K L
M N O P
Uh-oh
... (後續棋盤狀態)
Game Over
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved