# 输入整数n,m
n,m = map(int,input().split())
# 创建二维数组,table是(n + 2)* (m + 2)的数组,包含原有边界,省去边界处理
table = []
# 添加顶部行
table.append([0] * (m + 2))
# 添加元素,并将* .转化为int型1,0,方便进行统计,周围八领域有雷就加一
for i in range(n):
# 注意,每一行均需左右加两个0,包住原边界
h = [0] + [1 if ch == "*" else 0 for ch in input().strip()] + [0]
table.append(h)
# 添加底部行
table.append([0] * (m + 2))
# 创建以当前值为原点的八领域,横坐标向右为正,纵坐标向下为正
dx = [-1,-1,-1,0,0,1,1,1]
dy = [-1,0,1,-1,1,-1,0,1]
# 定义存储结果的二维数组
result = []
# 进入待处理二维数组进行公示计算
for i in range(1,n+1):
# 创建一维数组,记录处理后的每行元素
line = []
for j in range(1,m+1):
if table[i][j] == 1:
line.append("*")
else:
cnt = 0
# 计算周围雷数量
for h in range(8):
cnt = cnt + table[i + dx[h]][j + dy[h]]
line.append(str(cnt))
# 将处理后的每一行元素添加到二维结果列表里
result.append(line)
# 使用join元素导出符合标准的结果
for row in result:
print("".join(row))
困难
1.需要考虑边界处理,可通过四周包一圈不是雷的解决,
2.把雷的符号转化为0,1的,这样可通过八领域加法,完成雷个数的确定。
3.二维数组的使用:二维数组存入待处理数据,二维数组存入处理后的数据
4.使用join处理成题目要求的格式,join只能处理字符串。

京公网安备 11010502036488号