后知后觉


私信TA

用户名:2015416576

访问量:10953

签 名:

人总是要学习的,颓废了好久,现在又要重新上路了.....

等  级
排  名 5660
经  验 1450
参赛次数 0
文章发表 12
年  龄 21
在职情况 学生
学  校 qfnu
专  业 计算机科学与技术

  自我简介:

小白一枚,希望能遇到大神带我刷题。

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

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

    遍历一遍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;

}


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区