扫雷问题

Description

扫雷是Windows自带的游戏。游戏的目标是尽快找到雷区中的所有地雷,而不许踩到地雷。如果方块上的是地雷,将输掉游戏。如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷。

你的任务是在已知地雷出现位置的情况下,得到各个方块中的数据。

*....... “*”表示有地雷.*.. “.”表示无地雷....
经过处理应得到
*10022101*101110

Input

输入有多组数据,每组数据的第一行有两个数字,m,n(0<m,n<100)表示游戏中雷区的范围为m×n。接下来m行每行有n个字符。“*” 表示有地雷,“.”表示无地雷。最后一组数据m=0,n=0表示输入结束,不需要处理。

Output

对于每组输入数据,输出结果,各方块数字间不留空格。每组结果之后有一个空行。

Sample Input

2 3 
***
...
4 4
*...
....
.*..
....
0 0

Sample Output

***
232
*100
2210
1*10
1110


AC代码:

#include<stdio.h>
#include<string.h>
int main ()
{
    char a[100][100];
    int i,j,m,n,z,t;                     //b[100][100];
    while (~scanf("%d%d",&m,&n)&&m+n)    //&&m+n 意味都不等于0;
    {
       int b[100][100]={0};              //memset(b,0,sizeof(b));
        for(i=0; i<m; i++)
        {
            getchar();                   //消除空行的影响;
            for(j=0; j<n; j++)
                scanf("%c",&a[i][j]);    //逐个输入字母;
        }
        for(i=0; i<m; i++)
            for(j=0; j<n; j++)
            {
                if(a[i][j]=='*')          //判断个数的前提;
                {
                    for(z=i-1; z<=i+1; z++) 
                        for(t=j-1; t<=j+1; t++)    //周围八个位置(二维数组);
                            if(a[z][t]!='*')
                                b[z][t]++;         //位置对应数++;
                }
            }
        for(i=0; i<m; i++)
        {
            for(j=0; j<n; j++)
            {
                if(a[i][j]=='*')     
                    printf("*");
                else
                    printf("%d",b[i][j]);
            }
            printf("\n");                       //每一行的换行;
        }
        printf("\n");                           //每组测量数据的换行;
    } 
    return 0;
}

总结:扫雷问题:

             1.整懂题意;

             2.二维数组的使用,二位字符数组的输入,使用;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值