9 条题解
-
3刘睿宇 LV 9 @ 2024-11-15 23:39:03
#include <bits/stdc++.h> using namespace std; int a,b,c[114][114]; string s[114]; int main(){ cin >> a >> b; for(int i = 0 ; i < a ; i++) cin >> s[i]; for(int i = 0 ; i < a ; i++){ for(int j = 0 ; j < b ; j++){ if(s[i][j] == '*'){ c[i][j] = -114514; if(i == 0){ if(j == 0) c[i+1][j]++,c[i+1][j+1]++,c[i][j+1]++; else c[i][j-1]++,c[i+1][j-1]++,c[i+1][j]++,c[i+1][j+1]++,c[i][j+1]++; } else{ if(j == 0) c[i-1][j]++,c[i-1][j+1]++,c[i+1][j]++,c[i+1][j+1]++,c[i][j+1]++; else c[i-1][j-1]++,c[i][j-1]++,c[i+1][j-1]++,c[i+1][j]++,c[i+1][j+1]++,c[i][j+1]++,c[i-1][j]++,c[i-1][j+1]++; } } } } for(int i = 0 ; i < a ; i++){ for(int j = 0 ; j < b ; j++){ if(c[i][j] < 0) cout << "*"; else cout << c[i][j]; } cout << endl; } return 0; }
-
12023-11-19 17:04:59@
这道是个字符串的题,有许多人在刚开始做这道题的时候都会想着把角,边,中三个区域分别讨论(我刚开始就是这么想的),可是这样既复杂又容易出错。 我们完全可以先把整个地图给加一个边框,也就是我们把边框上的每一个点令其为'?',这样遍历的表格的时候不管这个点是四个角还是边上的,都可以直接判断周围的八个点。否则就会判断到周围有一个点是''(也就是啥都没有)。
我们在遍历的时候都得从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; }
-
12023-11-19 16:57:37@
#include<iostream> using namespace std; int ans[105][105]; int main() { int n,m; cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { char str; cin>>str; if(str=='*') ans[i][j]=1; else ans[i][j]=0; } } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { int sum=0; if(ans[i][j]==1) cout<<'*'; else { if(ans[i][j+1]==1) sum++; if(ans[i][j-1]==1) sum++; if(ans[i-1][j]==1) sum++; if(ans[i+1][j]==1) sum++; if(ans[i+1][j+1]==1) sum++; if(ans[i+1][j-1]==1) sum++; if(ans[i-1][j+1]==1) sum++; if(ans[i-1][j-1]==1) sum++; cout<<sum; } } cout<<endl; } return 0; }
-
12022-9-17 16:00:09@
_
#include <math.h> #include <stack> #include <stdio.h> #include <iostream> #include <vector> #include <iomanip> #include <string.h> #include <algorithm> using namespace std; #define LL long long const int N = 1e5 + 10; const int INF = 0x3f3f3f3f; char a[110][110]; int dx[] = {1,1,1,-1,-1,-1,0,0}; int dy[] = {0,1,-1,0,1,-1,1,-1}; int main() { int n,m; cin >> n >> m; for(int i = 0; i < n; i++) cin >> a[i]; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { int num = 0; if(a[i][j] == '*') cout << "*"; else { for(int k = 0; k < 8; k++) { int x = i + dx[k]; int y = j + dy[k]; if(x < 0 && y < 0 && x >= n && y >= m) continue; if(a[x][y] == '*') num++; } cout << num; } } cout << endl; } }
-
02023-11-27 17:50:49@
不知道
-
02022-9-12 10:55:42@
#include<iostream> #include<string.h> using namespace std; int ans[105][105]; int main() { int n,m; cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { char str; cin>>str; if(str=='*') ans[i][j]=1; else ans[i][j]=0; } } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { int sum=0; if(ans[i][j]==1) cout<<'*'; else { if(ans[i][j+1]==1) sum++; if(ans[i][j-1]==1) sum++; if(ans[i-1][j]==1) sum++; if(ans[i+1][j]==1) sum++; if(ans[i+1][j+1]==1) sum++; if(ans[i+1][j-1]==1) sum++; if(ans[i-1][j+1]==1) sum++; if(ans[i-1][j-1]==1) sum++; cout<<sum; } } cout<<endl; } return 0; }
-
02022-2-26 10:42:37@
#include <math.h> #include <stack> #include <stdio.h> #include <iostream> #include <vector> #include <iomanip> #include <string.h> #include <algorithm> using namespace std; #define LL long long const int N = 1e5 + 10; const int INF = 0x3f3f3f3f; char a[110][110]; int dx[] = {1,1,1,-1,-1,-1,0,0}; int dy[] = {0,1,-1,0,1,-1,1,-1}; int main() { int n,m; cin >> n >> m; for(int i = 0; i < n; i++) cin >> a[i]; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { int num = 0; if(a[i][j] == '*') cout << "*"; else { for(int k = 0; k < 8; k++) { int x = i + dx[k]; int y = j + dy[k]; if(x < 0 || y < 0 || x >= n || y >= m) continue; if(a[x][y] == '*') num++; } cout << num; } } cout << endl; } return 0; }
-
02022-1-25 10:22:51@
#include <math.h> #include <stack> #include <stdio.h> #include <iostream> #include <vector> #include <iomanip> #include <string.h> #include <algorithm> using namespace std; #define LL long long const int N = 1e5 + 10; const int INF = 0x3f3f3f3f; char a[110][110]; int dx[] = {1,1,1,-1,-1,-1,0,0}; int dy[] = {0,1,-1,0,1,-1,1,-1}; int main() { int n,m; cin >> n >> m; for(int i = 0; i < n; i++) cin >> a[i]; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { int num = 0; if(a[i][j] == '*') cout << "*"; else { for(int k = 0; k < 8; k++) { int x = i + dx[k]; int y = j + dy[k]; if(x < 0 || y < 0 || x >= n || y >= m) continue; if(a[x][y] == '*') num++; } cout << num; } } cout << endl; } return 0; }```
-
-12022-11-5 0:38:04@
牛逼o( ̄▽ ̄)d
- 1
信息
- ID
- 749
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 316
- 已通过
- 141
- 上传者