解题思路:
这个题的关键在于弄懂题目,知道题目问的是啥,其实翻译一遍可知道,该题目就是根据扫雷游戏的规则,给定最后的雷和安全区位置,填充信息场。 思路呢?  首先确定好输入,我弄了两个数组,都是存雷的信息,一个填充信息的时候计算周围八个格雷的个数用,另一个输出用。  

关键点: 计算周围八个格雷的个数

    遍历一遍b数组,如果不是雷的地方就要填充,是雷就原样输出,填充周围八个格,有几个雷就填充几。

怎么统一操作都是遍历周围八个格呢?  那就是在存的时候给定信息的外部填充一圈安全的字符,也就是'.'

这样后面的操作就统一了。 也就是二维数组的长度,要比他给的行列多出两行两列。



注意事项:
思路明白之后,注意事项就是别越界。 还有最后的输出格式,之间没有空格。

参考代码:

#include <iostream>

#include <string.h>

using namespace std;


int main()

{

    //输入

    int row, col;

    int times = 0;

    while (cin>>row>>col && row!=0 && col!=0)

    {

        times++;

        char a[row+2][col+2];

        char b[row+2][col+2];               //多出两行两列,填充。

        memset(a,'.',sizeof(a));

        memset(b,'.',sizeof(b));

        for (int i=1; i<=row; i++)

        {

            for (int j=1; j<=col; j++)

            {

                cin >> a[i][j];

                b[i][j] = a[i][j];

            }

        }


        //遍历一遍b数组,如果不是雷的地方就要填充,是雷就原样输出,填充是周围8个格,有几个雷就填充几

        cout << "Field #" << times << ":" << endl;

        for (int i=1; i<=row; i++)

        {

            for (int j=1; j<=col; j++)

            {

                if (b[i][j]!='*')

                {

                    int mine_num = 0;

                    //遍历周围的八个格

                    for (int m=i-1; m<=i+1; m++)

                    {

                        for (int n=j-1; n<=j+1; n++)

                        {

                            if (b[m][n]=='*')

                            {

                                 mine_num++;

                            }

                        }

                         //cout << mine_num << endl;

                    }

                    a[i][j] = mine_num + '0';

                }

            }

        }


        for (int i=1; i<=row; i++)

        {

            for (int j=1; j<=col; j++)

                cout << a[i][j];


            cout << endl;

        }


    cout << endl;

    }

    return 0;

}


点赞(3)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论