10 条题解
-
0
这道是个字符串的题,有许多人在刚开始做这道题的时候都会想着把角,边,中三个区域分别讨论(我刚开始就是这么想的),可是这样既复杂又容易出错。 我们完全可以先把整个地图给加一个边框,也就是我们把边框上的每一个点令其为'?',这样遍历的表格的时候不管这个点是四个角还是边上的,都可以直接判断周围的八个点。否则就会判断到周围有一个点是''(也就是啥都没有)。
我们在遍历的时候都得从1开始遍历,要给边框留下1的宽度。每次遍历完一个点都得清零。
代码就将就看看吧:
#include<bits/stdc++.h> #define endl '\n' using namespace std; const int N = 105; char a[N][N]; int p=0,n,m; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>m; for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { cin>>a[i][j]; } } for(int i=0; i<=n+1; i++) { a[0][i]='?'; } for(int i=0; i<=n+1; i++) { a[n+1][i]='?'; } for(int j=0; j<=m+1; j++) { a[j][0]='?'; } for(int j=0; j<=m+1; j++) { a[j][m+1]='?'; } for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { if(a[i][j]=='?') { if(a[i-1][j]=='*')p++; if(a[i+1][j]=='*')p++; if(a[i][j+1]=='*')p++; if(a[i][j-1]=='*')p++; if(a[i-1][j-1]=='*')p++; if(a[i-1][j+1]=='*')p++; if(a[i+1][j-1]=='*')p++; if(a[i+1][j+1]=='*')p++; cout<<p; p=0; continue; } cout<<a[i][j]; } cout<<endl; } return 0; }
信息
- ID
- 749
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 347
- 已通过
- 154
- 上传者