题解 | 扫雷
扫雷
https://www.nowcoder.com/practice/d5f277427d9a4cd3ae60ea6c276dddfd
#include <stdio.h> //标准输入输出函数头文件
int main()
{
int n,m; //定义整型变量,保存用户输入的信息
//输入
scanf("%d %d",&n,&m);
//这里多定义两行两列是为了不需要单独考虑边界的埋雷情况
char a[1002][1002]; //定义二维数组保存目标矩阵
//输入
for(int i=0;i<=n+1;i++)
{
for(int j=0;j<=m+1;j++)
{
if(i==0||i==n+1||j==0||j==m+1)
{
a[i][j]='.';
}
else
{
scanf(" %c",&a[i][j]);
}
}
}
//利用for循环寻找埋雷个数
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
int sum=0; //定义整型变量,保存无雷坐标周围的埋雷数量
if(a[i][j]=='.')
{
if(a[i-1][j-1]=='*')
{
sum++;
}
if(a[i-1][j]=='*')
{
sum++;
}
if(a[i-1][j+1]=='*')
{
sum++;
}
if(a[i][j-1]=='*')
{
sum++;
}
if(a[i][j]=='*')
{
sum++;
}
if(a[i][j+1]=='*')
{
sum++;
}
if(a[i+1][j-1]=='*')
{
sum++;
}
if(a[i+1][j]=='*')
{
sum++;
}
if(a[i+1][j+1]=='*')
{
sum++;
}
//最后将整型转换为字符型即加上0的ASCII值
a[i][j]=sum+'0';
}
}
}
//输出
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
printf("%c",a[i][j]);
}
//换行
printf("\n");
}
return 0;
}
查看7道真题和解析