这一题也是比较简单的,就是两层循环判断即可,没遇到一个‘#’就判断周围的'#'是否满足十字条件,若不满足,输出"NO"结束,否则就令这几个’#‘都为'.',注意要对每个位置都进行判断、处理
代码如下:
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#define maxn 110
using namespace std;
char a[maxn][maxn];
int main(void){
int n;
while(cin >> n){
for(int i=0; i<n; ++i)
for(int j=0; j<n; ++j)
cin >> a[i][j];
for(int i=0; i<n-2; ++i)
for(int j=1; j<n-1; ++j){
if(a[i][j] == '#'){
if(a[i+1][j]=='#' && a[i+2][j]=='#' && a[i+1][j-1]=='#' && a[i+1][j+1]=='#'){
a[i][j]='.';
a[i+1][j]='.';
a[i+2][j]='.';
a[i+1][j-1]='.';
a[i+1][j+1]='.';
}
else{
cout << "NO" << endl;
return 0;
}
}
}
for(int i=0; i<n; ++i)
if(a[i][0]=='#' || a[i][n-1]=='#'){
cout << "NO" << endl;
return 0;
}
for(int j=1; j<n-1; ++j)
if(a[n-2][j]=='#' || a[n-1][j]=='#'){
cout << "NO" << endl;
return 0;
}
cout << "YES" << endl;
}
return 0;
}