扫雷
来源:互联网 发布:淘宝赛罗奥特曼公仔 编辑:程序博客网 时间:2024/06/05 22:31
扫雷是Windows自带的游戏。游戏的目标是尽快找到雷区中的所有地雷,而不许踩到地雷。如果方块上的是地雷,将输掉游戏。如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷。
你的任务是在已知地雷出现位置的情况下,得到各个方块中的数据。
*...
.... “*”表示有地雷
.*.. “.”表示无地雷
....
经过处理应得到*100
2210
1*10
1110
这是对二维字符串的处理,你只要判断它的上下左右斜上斜下斜左斜右是否有雷即可。
代法如下:
#include<stdio.h>int main(){ int M,N; while(~scanf("%d%d",&M,&N)) { if(M==0&&N==0) break; getchar(); char a[M+2][N]; int i,j,k,l; for(i=0; i<M+2; i++) //对M+2行N列进行赋初值 for(j=0; j<N; j++) a[i][j]='.'; for(i=1; i<M+1; i++) gets(a[i]); //输入 for(i=1; i<M+1; i++) //因为要对上一行和下一行做判断,所以去中间的M行 { for(j=0; j<N; j++) { if(a[i][j]=='.') //如果不是雷,就判断它的四面八方有几个雷 { k=0; if(a[i-1][j]=='*') k++; if(a[i+1][j]=='*') k++; if(j!=0) //如果j=0的话,不能判断j-1 { if(a[i+1][j-1]=='*') k++; if(a[i][j-1]=='*') k++; if(a[i-1][j-1]=='*') k++; } if(j!=N-1) //如果j=N-1的话,就不能判断j+1 { if(a[i-1][j+1]=='*') k++; if(a[i+1][j+1]=='*') k++; if(a[i][j+1]=='*') k++; } printf("%d",k); } else printf("%c",a[i][j]); } printf("\n"); } printf("\n"); } return 0;}
0 0