消消樂

Boy^發表於2024-04-13
#include <bits/stdc++.h>  
using namespace std; // 使用C++標準名稱空間  
  
const int N = 1e3; // 定義一個常量N,值為1000,用於陣列的大小  
  
char s[N][N]; // 定義一個二維字元陣列,儲存輸入的字元矩陣  
bool vis[N][N]; // 定義一個二維布林陣列,標記字元是否需要被替換  
  
int main() { // 主函式入口  
    int n, m; // 定義n和m,分別表示字元矩陣的行數和列數  
    cin >> n >> m; // 從標準輸入讀取n和m的值  
    for (int i = 0; i < n; i++) { // 迴圈讀取字元矩陣的每一行  
        cin >> s[i]; // 將輸入的每一行儲存在s陣列中  
    }  
    // 下面的迴圈用於標記水平方向上連續的三個'*'字元,將中間的'*'標記為需要被替換  
    for (int i = 0; i < n; i++) {   
        for (int j = 1; j < m - 1; j++) {   
            if (s[i][j] == '*' && s[i][j - 1] == '*' && s[i][j + 1] == '*') {  
                vis[i][j - 1] = 1; // 標記左側'*'  
                vis[i][j] = 1; // 標記中間的'*'  
                vis[i][j + 1] = 1; // 標記右側的'*'  
            }  
        }  
    }  
  
    // 下面的迴圈用於標記垂直方向上連續的三個'*'字元,將中間的'*'標記為需要被替換  
    for (int i = 0; i < m; i++) {   
        for (int j = 1; j < n - 1; j++) {   
            if (s[j][i] == '*' && s[j - 1][i] == '*' && s[j + 1][i] == '*') {  
                vis[j - 1][i] = 1; // 標記上方的'*'  
                vis[j][i] = 1; // 標記中間的'*'  
                vis[j + 1][i] = 1; // 標記下方的'*'  
            }  
        }  
    }  
  
    // 輸出處理後的字元矩陣,被標記的'*'字元替換為'.'  
    for (int i = 0; i < n; i++) {   
        for (int j = 0; j < m; j++) {   
            if (vis[i][j]) {  
                cout << '.'; // 如果該位置的字元被標記,則輸出'.'  
            } else {  
                cout << s[i][j]; // 否則輸出原字元  
            }  
        }  
        cout << endl; // 每輸出完一行後換行  
    }  
    return 0; // 主函式返回0,表示程式正常結束  
}

  

相關文章