题目描述
在一个 n 行 m 列的方格图上有一些位置有地雷,另外一些位置为空。
请为每个空位置标一个整数,表示周围八个相邻的方格中有多少个地雷。
输入描述
输入的第一行包含两个整数 n,m。
第 2 行到第 n+1 行每行包含 m 个整数,相邻整数之间用一个空格分隔。如果对应的整数为 0,表示这一格没有地雷。如果对应的整数为 1,表示这一格有地雷。
其中,1≤n,m≤100 分钟后还是在当天。
输出描述
输出 n 行,每行 m 个整数,相邻整数之间用空格分隔。
对于没有地雷的方格,输出这格周围的地雷数量。对于有地雷的方格,输出 9。
解答:
首先要创建一个数组来存放输入,另外还需要创建一个数组来存放输出,然后开始遍历输入,从第一行第一列开始,如果该值(输入数组的值)为0,则遍历该值周围8个位置的值1的数量,记录到输出数组相同位置上;如果该值为1,则输出数组相同位置的值定为9。遍历结束之后按照输出要求输出输出数组即可
对数值的处理如下图:
import os
import sys
# 请在此输入您的代码
n,m = map(int,input().split())
ans = [] #输入的矩阵由二维数组存放
for i in range(n):
ans.append(list(map(int,input().split())))
al = [[0 for j in range(m)] for i in range(n)] #创建一个新的数组,初值设为1
dd = [(1, 0), (0, 1), (1, 1), (-1, 1), (1, -1), (-1, 0), (0, -1), (-1, -1)]
#dd数组是存放某点的周围8个位置的行列差值
for i in range(n):
for j in range(m):
if ans[i][j]==1: #如果该方格有地雷,则al中对应的位置的值设为9
al[i][j]=9
continue #如果有地雷,则进行下一层循环,下面的代码不再执行,相当于if~else语句
for x,y in dd: #如果该方格没有地雷,则计算它周围8个方格有地雷的个数,存放进去
nx = x + i
ny = y + j
if nx>=0 and nx<n and ny>=0 and ny<m: #判断该方格周围的这个方格是否存在
if ans[nx][ny] == 1: #如果该方格周围的这个方格有地雷,则该方格数值加一
al[i][j] += 1
for i in al:
print(' '.join(map(str,i)))
#join是连接字符串的函数方法,在同一行的每个值中间添加空格,即空格作为连接符,满足输出要求