扫雷是Windows自带的游戏。游戏的目标是尽快找到雷区中的所有地雷,而不许踩到地雷。如果方块上的是地雷,将输掉游戏。如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷。 你的任务是在已知地雷出现位置的情况下,得到各个方块中的数据。 *... .... “*”表示有地雷 .*.. “.”表示无地雷 .... 经过处理应得到 *100 2210 1*10 1110 输入 输入有多组数据,每组数据的第一行有两个数字,m,n(0<m,n<100)表示游戏中雷区的范围为m×n。接下来m行每行有n个字符。“*” 表示有地雷,“.”表示无地雷。最后一组数据m=0,n=0表示输入结束,不需要处理。 输出 对于每组输入数据,输出结果,各方块数字间不留空格。每组结果之后有一个空行。 输入样例2 3 *** ... 4 4 *... .... .*.. .... 0 0 输出样例*** 232 *100 2210 1*10 1110 Original: FZUPC Warmup 2005 #include<iostream>using namespace std; void do_with(char n[][100],int a,int b){ int i,j,k,h; for(i=0;i<a;i++) for(j=0;j<b;j++) if(n[i][j]=='*') { for(k=i-1;k<=i+1;k++) for(h=j-1;h<=j+1;h++) if(k<a&&k>=0&&h>=0&&h<b&&n[k][h]!='*')n[k][h]++; }} int main(){ int a,b,i,j; char n[100][100]; while(cin>>a>>b) { if(a==0&&b==0)break; for(i=0;i<a;i++) for(j=0;j<b;j++) { cin>>n[i][j]; if(n[i][j]=='.')n[i][j]='0'; } do_with(n,a,b); for(i=0;i<a;i++) { for(j=0;j<b;j++) cout<<n[i][j]; cout<<endl; } } return 0;}

评论