消消乐

#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,表示程序正常结束  
}

  

posted @ 2024-04-13 14:36  Boy^  阅读(65)  评论(0)    收藏  举报