2N×2N 棋盤,每個大寫字母恰好出現兩次。玩家輸入兩個坐標嘗試匹配:
#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;
}
isupper),防止 '*' 與 '*' 匹配remaining 追蹤未匹配字母數,避免掃描棋盤scanf(" %c", ...) 格式串前空格自動跳過空白字符輸入: 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