玩过扫雷游的朋友都知道,该游戏的目标是找出一个nm矩阵内的所有的地雷,在本题中,你需要为每一个单元格统计出它周围地雷的个数,每个单元格最多有8个相邻单元格,如下图,44 的格子里,用“*”表示雷,用“^” 表示没有雷。
*^^^
^^^^
*^
^^^^
计算后的输出结果为:
*100
2210
1*10
1110
输入格式:
输入包含若干个矩阵,对于每一个矩阵,第一行包含两个数M和N,分别表示该矩阵的行数和列数(0<N,M<100),接下来N行包含M个字符,就是该矩阵,用“*”表示地雷,用“^”表示空白。当N=M=0时,表示结束,不用处理该行。
输出格式:
对于每一个矩阵,首先在单独一行打印出矩阵序号:Field #X: 其中X是矩阵的编号,从1开始编号,接下来N行中,读入的“^”用该位置周围的地雷数目所代替,地雷处,仍用“*”表示。输出相邻的两个矩阵之间,空一行。
输入样例:
在这里给出一组输入。例如:
4 4
*^^^
^^^^
*^
^^^^
8 8
*^^*^^
*****^
***^
^**^
***^
*^^*^^
^**^
***^
0 0
输出样例:
在这里给出相应的输出。例如:
Field #1:
100
2210
110
1110
Field #2:
324310
420
25641
236**1
23431
334531
235**1
133**31
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<stdio.h>
//*附近8个均+1
void js(int m,int n,int a){
char ch[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
scanf(" %c",&ch[i][j]);
if(ch[i][j]!='*'){
ch[i][j]='0';
}
}
}
//遍历
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(ch[i][j]=='*'){
for(int a=0;a<3;a++){
for(int b=0;b<3;b++){
if(i-1+a<0||j-1+b<0||i-1+a>m-1||j-1+b>n-1)
{
continue;
}
else if(ch[i-1+a][j-1+b]=='*'){
continue;
}
ch[i-1+a][j-1+b]+=1;
}
}
}
}
}
printf("Field #%d:\n",a);
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
printf("%c",ch[i][j]);
}
printf("\n");
}
printf("\n");
}
int main(){
int m,n,a=1;
while(1){
scanf("%d%d",&m,&n);
if(m==0&&n==0)
{
break;
}
js(m,n,a);
a++;
}
return 0;
}