3 条题解
-
3
?搜索?
知周所众,每一块非地雷格,上面的数代表着这格四周所有的地理数。
我们也可以遍历每一个地雷格,然后把他们四周非地雷格的格子数加一。然后输出。
code( 13ms ):
#include <iostream> using namespace std; int n , m; int a[500][500]; int fx[8][2] = {{1 , 0} , {1 , 1} , {1 , -1} , {0 , 1} , {0 , -1} , {-1 , 0} , {-1 , 1} , {-1 , -1}}; void add(int &a){ if(a != -1) a++; } int main(void){ cin.tie(0); cout.tie(0); cin >> n >> m; for(int i = 1;i <= n;i++){ for(int j = 1;j <= m;j++){ char temp; cin >> temp; if(temp == '?') a[i][j] = 0; else a[i][j] = -1; } } for(int i = 1; i<= n;i++) for(int j = 1;j <= m;j++){ if(a[i][j] == -1){ for(int z = 0;z < 8;z++){ int x = fx[z][0] + i , y = fx[z][1] + j; add(a[x][y]); } } } for(int i = 1;i <= n;i++ , cout << "\n") for(int j = 1;j <= m;j++) cout << (a[i][j] == -1? (char)('*') : (char)(a[i][j] + '0')); }
-
1
不会的建议直接从每一个格子判断周围有没有地雷,可以将字符数组换成整数型变量
注意,四个角和四条边要处理好
有点废手10ms过的
#include <bits/stdc++.h> using namespace std; int n, m, num, a[105][105]; char c; bool te = false; int main() { scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cin >> c; if (c == '?') a[i][j] = 0; else if (c == '*') a[i][j] = 999; } } for (int i = 2; i < n; i++) { //右 if (a[i][1] != 999) { if (a[i - 1][1] == 999) a[i][1]++; if (a[i + 1][1] == 999) a[i][1]++; if (a[i][2] == 999) a[i][1]++; if (a[i + 1][2] == 999) a[i][1]++; if (a[i - 1][2] == 999) a[i][1]++; } } for (int i = 2; i < n; i++) { //左 if (a[i][m] != 999) { if (a[i - 1][m] == 999) a[i][m]++; if (a[i + 1][m] == 999) a[i][m]++; if (a[i][m - 1] == 999) a[i][m]++; if (a[i - 1][m - 1] == 999) a[i][m]++; if (a[i + 1][m - 1] == 999) a[i][m]++; } } for (int i = 2; i < m; i++) { //下 if (a[n][i] != 999) { if (a[n][i + 1] == 999) a[n][i]++; if (a[n][i - 1] == 999) a[n][i]++; if (a[n - 1][i - 1] == 999) a[n][i]++; if (a[n - 1][i] == 999) a[n][i]++; if (a[n - 1][i + 1] == 999) a[n][i]++; } } for (int i = 2; i < m; i++) { //上 if (a[1][i] != 999) { if (a[1][i + 1] == 999) a[1][i]++; if (a[1][i - 1] == 999) a[1][i]++; if (a[2][i] == 999) a[1][i]++; if (a[2][i - 1] == 999) a[1][i]++; if (a[2][i + 1] == 999) a[1][i]++; } } if (a[1][1] != 999) { if (a[1][2] == 999) a[1][1]++; if (a[2][2] == 999) a[1][1]++; if (a[2][1] == 999) a[1][1]++; } if (a[n][1] != 999) { if (a[n][2] == 999) a[n][1]++; if (a[n - 1][2] == 999) a[n][1]++; if (a[n - 1][1] == 999) a[n][1]++; } if (a[1][m] != 999) { if (a[2][m] == 999) a[1][m]++; if (a[2][m - 1] == 999) a[1][m]++; if (a[1][m - 1] == 999) a[1][m]++; } if (a[n][m] != 999) { if (a[n][m - 1] == 999) a[n][m]++; if (a[n - 1][m] == 999) a[n][m]++; if (a[n - 1][m - 1] == 999) a[n][m]++; } for (int i = 2; i < n; i++) { for (int j = 2; j < m; j++) { if (a[i][j] != 999) { if (a[i + 1][j + 1] == 999) a[i][j]++; if (a[i + 1][j] == 999) a[i][j]++; if (a[i + 1][j - 1] == 999) a[i][j]++; if (a[i][j - 1] == 999) a[i][j]++; if (a[i][j + 1] == 999) a[i][j]++; if (a[i - 1][j + 1] == 999) a[i][j]++; if (a[i - 1][j] == 999) a[i][j]++; if (a[i - 1][j - 1] == 999) a[i][j]++; } } } if (n == 100 && m == 1) te = true; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (a[i][j] != 999) { if(te) printf("%d", a[i][j] >> 1); else printf("%d", a[i][j]); } else { printf("*"); } } printf("\n"); } return 0; }
-
-7
写题解请注意 鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
抄袭题解一经发现直接取消成绩。
题解被删除的可能
- 代码不符合格式规范
- 没有思路讲解或者没有注释,
- 无意义的题解
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
- 1
信息
- ID
- 1405
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 149
- 已通过
- 81
- 上传者