学习Python从娃娃抓起!记录下蓝桥杯备考比赛学习过程中的题目,记录每一个瞬间。
附上汇总贴:蓝桥杯备考冲刺必刷题(Python) | 汇总-CSDN博客
【题目描述】
在一个n行m列的方格图上有一些位置有地雷,另外一些位置为空。
请为每个空位置标一个整数,表示周围八个相邻的方格中有多少个地雷。
【输入】
输入的第一行包含两个整数n,m。
第2行到第n+1行每行包含m个整数,相邻整数之间用一个空格分隔。如果对应的整数为0,表示这一格没有地雷。如果对应的整数为1,表示这一格有地雷。
其中,1≤n,m≤100。
【输出】
输出n行,每行m个整数,相邻整数之间用空格分隔。
对于没有地雷的方格,输出这格周围的地雷数量。对于有地雷的方格,输出9。
【输入样例】
3 4
0 1 0 0
1 0 1 0
0 0 1 0
【输出样例】
2 9 2 1
9 4 9 2
1 3 9 2
【代码详解】
n, m = [int(i) for i in input().split()] # 输入n和m
a = [[int(i) for i in input().split()] for i in range(n)] # 输入a矩阵
b = [[0 for i in range(m)] for i in range(n)] # 初始化b矩阵
dx=[-1,-1,-1,0,0,1,1,1] # 定义x和y的偏移量
dy=[-1,0,1,-1,1,-1,0,1]
for x in range(n): # 遍历x和y坐标
for y in range(m):
if a[x][y]==1: # 如果[x,y]点上有地雷
b[x][y]=9 # 标记为9
else: # 否则
cnt = 0 # 定义计数器,统计8个方向的地雷数量
for i in range(8): # 遍历8个方向
xx = x+dx[i] # x和y偏移
yy = y+dy[i]
if xx>=0 and xx<n and yy>=0 and yy<m: # 在坐标范围内
if a[xx][yy]==1: # 如果位置上有地雷
cnt+=1 # 计数器自增1
b[x][y]=cnt # 标记周围地雷数量
for i in range(n): # 输出b矩阵
for j in range(m):
print(b[i][j], end=' ')
print()
【运行结果】
3 4
0 1 0 0
1 0 1 0
0 0 1 0
2 9 2 1
9 4 9 2
1 3 9 2