ganmu


私信TA

用户名:dotcpp0726067

访问量:3487

签 名:

等  级
排  名 1522
经  验 2812
参赛次数 0
文章发表 104
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

此题可用两个二维数组解决,一个char类型,一个int类型

char用于接收用户输入的  .和*;在接收时即可给第二个int类型数组赋值,当char中接收的是.时,在int中的对应位置输入0,是*时,在int对应位置输入-100

完成上一步之后,再在int数组中进行操作

逐个读取int数组中的数据,当数据>=0时则不进行操作,当数据<0时则把该数据周围的数据进行++操作,直到遍历完成

此时int数组中只会出现两种结果:1、其中数据<0;  2、其中数据>=0

当数据<0时即代表此处数据在char类型数组中对应的是*;>=0则代表对应的是.

再回到char数组中进行操作,即把int数组中>=0的数据转换成char类型,赋值到char数组对应的位置,<0的则不管

最后输出char类型数组即可


注意事项:

此处只提供思路,思路是正确的,且vs编译出来答案也正确,但是网页编译器编译出来显示格式错误,所以可以只看我的思路,去找一个其他题解复制代码提交即可

参考代码:

#include<iostream>

using namespace std;

//上:arr2[i-1][j]++;

//下:arr2[i+1][j]++;

//左:arr2[i][j-1]++;

//右:arr2[i][j+1]++;

//左上:arr2[i-1][j-1]++;

//右上:arr2[i-1][j+1]++;

//左下:arr2[i+1][j-1]++;

//右下:arr2[i+1][j+1]++;

int main() 

{

    int a, b;

    int c = 1;

    char arr1[100][100];//用于接收用户输入的字符

    int arr2[100][100];//用于存放数据

    while (cin >> a >> b && a != 0)

    {

        for (int i = 0; i < a; i++)//录入字符的同时,当录入为.时则把数组对应位置记为0

        {

            for (int j = 0; j < b; j++)

            {

                cin >> arr1[i][j];

                if (arr1[i][j] == '.')

                    arr2[i][j] = 0;

                else//当录入为*时则把数组对应位置记为-100

                    arr2[i][j] = -100;

            }

        }

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

        c++;

        for (int i = 0; i < a; i++)//遍历数组

        {

            for (int j = 0; j < b; j++)

            {

               if (arr2[i][j] < 0)//当有数小于0时(即对应位置为*),则把周围一圈全部+1

               {

                   if(i-1>=0)//可以向上走

                       arr2[i - 1][j]++;

                   if(i+1<a)//可以向下走

                       arr2[i + 1][j]++;

                   if(j-1>=0)//可以向左走

                       arr2[i][j - 1]++;

                   if(j+1<b)//可以向右走

                       arr2[i][j + 1]++;

                   if(i-1>=0&&j-1>=0)//可以向左上走

                       arr2[i - 1][j - 1]++;

                   if(i+1<a&&j-1>=0)//可以向左下走

                       arr2[i + 1][j - 1]++;

                   if(i - 1 >= 0&& j + 1 < b)//可以向右上走

                       arr2[i - 1][j + 1]++;

                   if(i + 1 < a&& j + 1 < b)//可以向右下走

                       arr2[i + 1][j + 1]++;

               }

            }

        }

        for (int i = 0; i < a; i++)//遍历数组,把.换成大于0的数,小于0的数不换

        {

            for (int j = 0; j < b; j++)

            {

                if (arr2[i][j] >= 0)

                    arr1[i][j] = arr2[i][j]+'0';//类型转换int->char : +'0';char->int : -'0'

                cout << arr1[i][j];

            }

            cout << endl;

        }

        

    }

    return 0;

}



 

0.0分

0 人评分

  评论区

  • «
  • »