扫雷

来源:互联网 发布:淘宝赛罗奥特曼公仔 编辑:程序博客网 时间: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
原创粉丝点击