ccf csp 201604-2俄罗斯方块(python)

历年题解 CCF CSP历年题解(python)

在这里插入图片描述在这里插入图片描述

样例输入:

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0
1 1 1 0 0 0 1 1 1 1
0 0 0 0 1 0 0 0 0 0
0 0 0 0
0 1 1 1
0 0 0 1
0 0 0 0
3

题目链接:201604-2俄罗斯方块

问题分析: 将小方块的板块从方格图顶部开始向下落,遇到方块(1)停止下落,未遇到方块则放置到下边界

满分例程:

s = []  # 15*10方格网
b = []  # 4*4加入板块
for i in range(15):
    s += list(map(int, input().split()))
for i in range(30):  # 底部外加3行判断板块的1、2、3行
    s += [0]

for i in range(4):
    b += map(int, input().split())
n = int(input())
bl = False  # 用于终止循环,终止方块下落
h = -1
for i in range(15): # 方格图的15行
    for j in range(4):  # 遍历板块   行
        for k in range(4):  # 遍历   列
            if s[(i + j) * 10 + n - 1 + k] + b[j * 4 + k] == 2:
                bl = True
                h = i - 1  # 记录下落最后位置
                break
        if bl == True:
            break
    if bl == True:
        bl = False
        break

if h == -1: # 下落过程碰不到方块,直接落到下边界
    for i in range(3, -1, -1):
        for j in range(4):
            if b[i * 4 + j] == 1:
                h = 15 - i - 1 
                bl = True
                break
        if bl == True:
            break

for i in range(4): # 在方格图中用板块替代
    for j in range(4):
        s[(i + h) * 10 + n - 1 + j] += b[i * 4 + j]
        
for i in range(15):
    for j in range(10):
        if j == 0:
            print(s[i * 10 + j], end='')
        else:
            print('', s[i * 10 + j], end='')
    if i != 14:
        print()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值