叠方块游戏
提交数: 240, 通过率: 64.17%, 平均分: 65.67
题目描述:
在一个 10×10的区域内玩叠方块游戏,为方便处理,该区域的行号从下往上依次编号为1、2、……、9、10,列号从右往左依次编号为0、1、……、8、9。方块只有一种形状,如下图a所示,左上角是该方块的中心位置。程序先随机生成5个[1,9]范围内的数字并输出,每个数字即为方块的中心位置从该数字表示的列掉下来,若碰到方块就叠上去,若一直掉到底部都没有碰到方块,就停在底部。所有操作结束后,输出整个区域的状态,如下图b、图c所示。图d为行、列编号示意图。
现在给定5个[1,9]范围内的数字,输出指定的图形。
输入格式:
一个5位的整数。
输出格式:
输出对应的图形,用#表示方块。
样例输入:
77469
样例输出:
## # ## # #### ## # # #
提示:
算法概述如下:用一个二进制位表示某个位置的状态,0表示该位置没有方块,1表示该位置有方块,每一行的状态存储在数组a中。例如:图b第1行的状态为“ 1010101010”,则 a(1)=682,即29+27+25+23+21=682,根据 a(1) // 2 ** 1 % 2的结果可判断第1行的第1列是否有方块。
(1)以图c为例,a(1) // 2 ** 4 % 2的结果是_________________(填数字)。
(2)实现上述功能的Python程序如下,请在划线处填入合适的代码。
n = 10
s = input()
#开始游戏
a = [0] * (n + 1)
for c in s:
t = int(c)
for i in range(n - 2, _______(1)________): #i == 0时候方块可以直接到达底部
if a[i] // 2 ** t % 2 == 1 or a[i + 1] // 2 ** (t - 1) % 2 == 1 or i == 0:
a[i + 1] = a[i + 1] + 2 ** t
________________(2)___________________
break
for i in range(n, 0, -1):
ans = ""
for j in range(n):
if a[i] % 2 == 1:
ans = "#" + ans
else:
ans = " " + ans
__________(3)_____________
print(ans)
时间限制: 1000ms空间限制: 256MB
来源: 高二浙南联盟期末考2020