叠方块游戏

提交数: 240, 通过率: 64.17%, 平均分: 65.67

题目描述:

在一个 10×10的区域内玩叠方块游戏,为方便处理,该区域的行号从下往上依次编号为1、2、……、9、10,列号从右往左依次编号为0、1、……、8、9。方块只有一种形状,如下图a所示,左上角是该方块的中心位置。程序先随机生成5个[1,9]范围内的数字并输出,每个数字即为方块的中心位置从该数字表示的列掉下来,若碰到方块就叠上去,若一直掉到底部都没有碰到方块,就停在底部。所有操作结束后,输出整个区域的状态,如下图b、图c所示。图d为行、列编号示意图。

1729825700368746546.png

现在给定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