zoukankan      html  css  js  c++  java
  • CCF NOI1054 扫雷游戏

    问题链接CCF NOI1054 扫雷游戏




    时间限制: 1000 ms  空间限制: 262144 KB

    题目描述 

      扫雷游戏是一款十分经典的单机小游戏。它的精髓在于,通过已翻开格子所提示的周围格地雷数,来判断未翻开格子里是否是地雷。
      现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格的周围格地雷数。
      注:每个格子周围格有八个:上、下、左、右、左上、右上、左下、右下。

    输入

      第一行包含两个整数n和m,分别表示雷区的行数和列数。1 <= n <= 100, 1 <= m <= 100。
      接下来n行,每行m个字符,‘*’表示相应格子中是地雷,‘?’表示相应格子中无地雷。字符之间无任何分隔符

    输出

      n行,每行m个字符,描述整个雷区。若相应格中是地雷,则用‘*’表示,否则用相应的周围格地雷数表示。字符之间无任何分隔符。

    样例输入

    3 3
    *??
    ???
    ?*?
    样例输出

    *10
    221
    1*1

    数据范围限制

      1 <= n <= 100, 1 <= m <= 100。




    问题分析

      扫雷游戏是人们熟知的一个计算机游戏,通过这个程序,可以了解其局部的计算是如何实现的。

      这是一个简单的计算问题,对于一个位置,直接计算其周围的地雷数量即可。

    程序说明

      定义二维数组用于存储扫雷游戏的棋盘时,周围多出一圈,可以省去数组下标的越界判定。

      这里给出两种计算地雷数量的方法,分别编写程序。

    要点详解
    • 先定义一个符号常量,再用它来定义二维数组,可以使得程序的通用性得到提高
    • 一些编程技巧有助于简化程序的代码
    • 函数memset()用于给大量的存储空间设置初始值是方便的。
    • 数组around[]存储周围元素的相对下标,使得无序变有序,可以用循环来处理。



    参考链接:(略)。

    100分通过的C语言程序之一:

    #include <stdio.h>
    #include <string.h>
    
    struct _around {
        int drow;
        int dcol;
    } around[] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}};
    #define AN 8
    
    #define N 100
    char a[N+2][N+2];
    
    int main(void)
    {
        int n, m, i, j, k;
    
        memset(a, 0, sizeof(a));
    
        scanf("%d%d", &n, &m);
        for(i=1; i<=n; i++)
            scanf("%s", a[i]+1);
    
        for(i=1; i<=n; i++) {
            for(j=1; j<=m; j++) {
                int count = 0;
                if(a[i][j] == '*')
                    printf("%c", a[i][j]);
                else {
                    for(k=0; k<AN; k++)
                        if(a[i + around[k].drow][j + around[k].dcol] == '*')
                            count++;
                    printf("%d", count);
                }
            }
            printf("
    ");
        }
        return 0;
    }

    100分通过的C语言程序之二:

    #include <stdio.h>
    
    struct _around {
        int drow;
        int dcol;
    } around[] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}};
    #define AN 8
    
    #define N 100
    
    char a[N+2][N+2];
    
    int main(void)
    {
        int n, m, i, j, k;
    
        scanf("%d%d", &n, &m);
        for(i=1; i<=n; i++)
            scanf("%s", a[i]+1);
    
        for(i=1; i<=n; i++)
            for(j=1; j<=m; j++)
                if(a[i][j] != '*')
                    a[i][j] = 0;
    
        for(i=1; i<=n; i++)
            for(j=1; j<=m; j++)
                if(a[i][j] == '*')
                    for(k=0; k<AN; k++)
                        if(a[i + around[k].drow][j + around[k].dcol] != '*')
                            a[i + around[k].drow][j + around[k].dcol]++;
    
        for(i=1; i<=n; i++) {
            for(j=1; j<=m; j++)
                if(a[i][j] == '*')
                    printf("%c", a[i][j]);
                else
                    printf("%d", a[i][j]);
            printf("
    ");
        }
    
        return 0;
    }
    
    /*
    4 4
    ?**?
    *?**
    ????
    ??*?
    2**3
    *4**
    1333
    01*1
    */




  • 相关阅读:
    Python升级3.6 强力Django+Xadmin打造在线教育平台
    第六模块:WEB框架开发 第1章·Django框架开发1~50
    阿里云主机(ECS)与CentOS7实战
    Django入门与实战
    第五模块:WEB开发基础 第2章·JavaScript基础
    第五模块:WEB开发基础 第1章·HTML&CSS基础
    第四模块:网络编程进阶&数据库开发 第2章·MySQL数据库开发
    阿里云ECS云服务器CentOS7.4下安装MySQL5.7.13、JDK1.7.80、Mycat1.6.5、Redis3.2.10、Nginx1.14.0以及Tomcat7.0.72
    《百词斩·象形9000》第一册(上) 符号Symbol 1
    第三模块:面向对象&网络编程基础 第2章 网络编程
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563897.html
Copyright © 2011-2022 走看看