其实只需要for循环中嵌套for循环,第一个for循环是遍历扫雷盘中的值,第二个for循环则是寻找该值周围的雷数。
#include "iostream"
using namespace std;
int main()
{
int n,m,i,j,count,k,u;
char a[1000][1000],b[1000][1000];
cin >> n >> m;
for(i=0;i<n;i++) //输入扫雷盘
for(j=0;j<m;j++)
cin >> a[i][j];
for(i=0;i<n;i++) //对扫雷盘数组a进行判断,存入数组b中
for(j=0;j<m;j++)
{
count = 0; //标记周围的雷数
if(a[i][j]=='*') //如果当前位置是雷
b[i][j] = '*'; //直接赋值为雷,不需要扫描周围雷数
else //当前位置不为雷
{
for(k=i-1;k<=i+1;k++) //从当前位的左边一位开始,到右边一位结束
for(u=j-1;u<=j+1;u++) //从当前位的上边一位开始,到下边一位结束
{
if(k<0||u<0||k>=n||u>=m) //如果数组下标非法直接跳过,进行下一次循环
continue;
if(a[k][u]=='*') //如果为雷,标志位自增
count ++;
}
b[i][j] = '0' + count; //将雷数转换成char类型赋值给b数组
}
}
for(i=0;i<n;i++) //输出b数组
{
for(j=0;j<m;j++)
cout << b[i][j];
cout << endl;
}
}
using namespace std;
int main()
{
int n,m,i,j,count,k,u;
char a[1000][1000],b[1000][1000];
cin >> n >> m;
for(i=0;i<n;i++) //输入扫雷盘
for(j=0;j<m;j++)
cin >> a[i][j];
for(i=0;i<n;i++) //对扫雷盘数组a进行判断,存入数组b中
for(j=0;j<m;j++)
{
count = 0; //标记周围的雷数
if(a[i][j]=='*') //如果当前位置是雷
b[i][j] = '*'; //直接赋值为雷,不需要扫描周围雷数
else //当前位置不为雷
{
for(k=i-1;k<=i+1;k++) //从当前位的左边一位开始,到右边一位结束
for(u=j-1;u<=j+1;u++) //从当前位的上边一位开始,到下边一位结束
{
if(k<0||u<0||k>=n||u>=m) //如果数组下标非法直接跳过,进行下一次循环
continue;
if(a[k][u]=='*') //如果为雷,标志位自增
count ++;
}
b[i][j] = '0' + count; //将雷数转换成char类型赋值给b数组
}
}
for(i=0;i<n;i++) //输出b数组
{
for(j=0;j<m;j++)
cout << b[i][j];
cout << endl;
}
}

京公网安备 11010502036488号