一道普普通通简简单单的模拟题,但是细节也挺多的。
大致思路就是用while循环接收数据,用for循环控制次数,创建二维数组,如果是雷记为1,不是雷记为0,最后用for循环遍历出来即可。
两个细节,首先是cin之后用getchar()吞掉回车,防止干扰后面的while循环。其次就是输入和输出用for循环要从1开始,不然会涉及下标在数组外。话不多说,奉上AC代码
#include<iostream>
using namespace std;
int main() {
int x, y, a[110][110] = { 0 };
char c;
cin >> x >> y;
getchar();//吞回车
for (int i = 1; i <= x; i++) {
int j = 1;
while ((c = getchar()) != '\n') {
if (c == '*') {//有雷
a[i][j++] = 1;
}
else//无雷
a[i][j++] = 0;
}
}
for (int i = 1; i <=x; i++) {
for (int j = 1; j <=y; j++) {
if (a[i][j] == 0) {
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];
}
else
cout << "*";
}
cout << endl;
}
}
,