解题思路:
此题可用两个二维数组解决,一个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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复