过年咯!马年快乐!没事儿写个题解
2026-02-08 14:05:14
发布于:浙江
3阅读
0回复
0点赞
这道题讲的是扫雷游戏,相信很多狗友们也玩过,规则也很简单,点击空块,显示数字,排出附近的雷;如果你踩到雷了,那么,不好意思你死了
http://g.3699.co 简易版扫雷
言归正传。给出一个n行m列的雷区,"*"代表雷,"?"代表未知数字,让我们求出这些数字。一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。我们发现这道题可以用下标实现:
第一步:定义一个九宫格c[10][10]
(注:下标从1开始,故开到10,以防数组越界,RE!)!!!由于数据中出现的是"*","?"加粗文本等字符,故定义成"char"字符类型
以样例1为例:
int n,m;
char c[10][10];
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>c[i][j];
九宫格如下:
| * | ? | ? |
|---|---|---|
| ? | ? | ? |
| ? | * | ? |
第二步:定义标记数组a[10][10]
在输入时,如果检测到雷,标记1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>c[i][j];
if(c[i][j]=='*'){
a[i][j]=1;
}
}
}
标记数组:
| 1 | 0 | 0 |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
第三步:遍历九宫格
先判断:当前格是否是雷格
是则直接输出雷符号:"*"
if(c[i][j]=='*') cout<<c[i][j];
否则遍历九宫格下标
九宫格下标如下:
| i-1,j-1 | i-1,j | i-1,j+1 |
|---|---|---|
| i,j-1 | i,j | i+1,j |
| i+1,j-1 | i+1,j | i+1,j+1 |
遍历标记数组,寻找标记为1的雷格,并将其值相加,最后输出i , j周围八个格子的雷的数量
else
cout<<a[i-1][j-1]+a[i-1][j]+a[i-1][j+1]+a[i][j-1]+a[i][j+1]+a[i+1][j-1]+a[i+1][j]+a[i+1][j+1];
这样,代码的主干就完成了✔
但是要注意!!!,题目所给出的提示是:
对于100%的数据,1≤n≤100, 1≤m≤1001≤n≤100,1≤m≤100
所以两个数组要变成
int a[105][105];
char c[105][105];
//建议定义成全局变量
最后,再将所有代码块块拼接在一起:
首先,万能头+定义变量
#include<bits/stdc++.h>
using namespace std;
int n,m,a[105][105];
char c[105][105];
int main(){
return 0;
}
接着,进行输入+打标记
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>c[i][j];
if(c[i][j]=='*'){
a[i][j]=1;
}
}
}
最后,遍历+输出
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(c[i][j]=='*') cout<<c[i][j];
else{
cout<<a[i-1][j-1]+a[i-1][j]+a[i-1][j+1]+a[i][j-1]+a[i][j+1]+a[i+1][j-1]+a[i+1][j]+a[i+1][j+1];
}
}
printf("\n");//别忘了换行!!
}
完整代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,m,a[105][105];
char c[105][105];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>c[i][j];
if(c[i][j]=='*'){
a[i][j]=1;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(c[i][j]=='*') cout<<c[i][j];
else{
cout<<a[i-1][j-1]+a[i-1][j]+a[i-1][j+1]+a[i][j-1]+a[i][j+1]+a[i+1][j-1]+a[i+1][j]+a[i+1][j+1];
}
}
printf("\n");
}
return 0;
}
(注:禁止抄袭!!!)
祝ACGO正在努力打代码的狗友们新年快乐!!!🎉🎉🎉
这里空空如也







有帮助,赞一个