扫雷

简介: 扫雷

19.png

问题描述

 扫雷游戏你一定玩过吧!现在给你若干个n×m的地雷阵,请你计算出每个矩阵中每个单元格相邻单元格内地雷的个数,每个单元格最多有8个相邻的单元格。 0< n,m< =100

输入格式

 输入包含若干个矩阵,对于每个矩阵,第一行包含两个整数n和m,分别表示这个矩阵的行数和列数。接下来n行每行包含m个字符。安全区域用‘.’表示,有地雷区域用’*‘表示。当n=m=0时输入结束。

输出格式

 对于第i个矩阵,首先在单独的一行里打印序号:“Field #i:”,接下来的n行中,读入的’.'应被该位置周围的地雷数所代替。输出的每两个矩阵必须用一个空行隔开。


20.png

思路:遍历每个点,如果本身是地雷直接输出,否则统计周围的地地雷并输出~

#include <stdio.h>
#include <string.h>
int main()
{
    int n, m, i, j, d = 1;
    char lei[1000][1000];
    while (scanf ("%d %d", &n, &m))
    {
        if ( n == 0 && m == 0)
            break;
        else
        {
            memset(lei, 0, sizeof(lei));
            for (j = 0; j < n; j++)
            {
                char temp = getchar();
                for (i = 0; i < m; i++)
                    scanf ("%c", &lei[j][i]);
            }
             if (d != 1) printf ("\nField #%d:\n", d++);
            else printf ("Field #%d:\n", d++);
            for (j = 0; j < n; j++)
            {
                for (i = 0; i < m; i++)
                {
                    int tot = 0;
                    if (lei[j][i] == '*')
                         printf ("*");
                    else
                    {
                        if (j-1 >= 0 && i-1 >= 0 && lei[j-1][i-1] == '*') tot++;
                        if (j-1 >= 0 && i >= 0 && lei[j-1][i] == '*') tot++;
                        if (j-1 >= 0 && i+1 < m && lei[j-1][i+1] == '*') tot++;
                        if ( i-1 >= 0 && lei[j][i-1] == '*') tot++;
                        if ( i+1 < m && lei[j][i+1] == '*') tot++;
                        if (j+1 < n && i-1 >= 0 && lei[j+1][i-1] == '*') tot++;
                        if (j+1 < n && lei[j+1][i] == '*') tot++;
                        if (j+1 < n && i+1 < m && lei[j+1][i+1] == '*') tot++;
                        printf ("%d", tot);
                    }
                }
                printf ("\n");
            }
        }
    }
 }
#include<stdio.h>
#define N 110
int  main()
{
    char a[N][N];
    int n,m,t,i,j,k=1;
    static int b[N][N];
    for(n=m=1; n!=0 && m!=0; )
    {
        for(i=0;i<N;i++)
        {
            for(j=0;j<N;j++)
            b[i][j]=0;
        }
        scanf("%d %d",&n,&m);
        for(t=n;t>0;t--)
            scanf("%s",a[n-t]);
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                if(a[i][j]=='*') 
                {
                    b[i][j]++;b[i+1][j]++;b[i+2][j]++;b[i][j+1]++;b[i+2][j+1]++;b[i][j+2]++;b[i+1][j+2]++;b[i+2][j+2]++;
                }
            }
        }
        if(n!=0&&k>1) {printf("\nField #%d:\n",k); k++;}
        else if(n!=0) {printf("Field #%d:\n",k); k++;}
        for(i=0;i<n;i++,printf("\n"))
        {
            for(j=0;j<m;j++)
            {
                if(a[i][j]=='*') printf("*");
                else  printf("%d",b[i+1][j+1]);
            }
        }
    }
}
相关文章
|
7月前
|
C语言
扫雷游戏
扫雷游戏
52 0
|
5月前
|
存储
|
C语言
扫雷游戏的实现(上)
扫雷游戏的实现
62 0
|
7月前
|
算法 C语言
三子棋小游戏(可改棋盘大小)
三子棋小游戏(可改棋盘大小)
79 0
扫雷游戏的实现(详解)
扫雷游戏的实现(详解)
105 0
|
存储
扫雷小游戏
扫雷小游戏
84 0
|
C语言
扫雷游戏的实现(下)
扫雷游戏的实现(下)
58 0
|
小程序
扫雷小游戏详解
扫雷小游戏详解
71 0
简易扫雷游戏
简易扫雷游戏
90 0