python ccf题解 201604-2 俄罗斯方块
问题描述
试题编号: | 201604-2 |
试题名称: | 俄罗斯方块 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏。 输入格式 输入的前15行包含初始的方格图,每行包含10个数字,相邻的数字用空格分隔。如果一个数字是0,表示对应的方格中没有方块,如果数字是1,则表示初始的时候有方块。输入保证前4行中的数字都是0。 输出格式 输出15行,每行10个数字,相邻的数字之间用一个空格分隔,表示板块下落后的方格图。注意,你不需要处理最终的消行。 样例输入 0 0 0 0 0 0 0 0 0 0 样例输出 0 0 0 0 0 0 0 0 0 0 |
解决问题思路是模拟板块下降的过程,若有碰撞则发生碰撞上一行就是最终确定的位置,若板块与方格图某个位置都为1即为碰撞了产生重叠,这个位置两项加起来为2,判断板块与方格图每项分别加起来是否有2就能确认是否碰撞。
代码
[code]#俄罗斯方块 tmap = []#存储(15+3)行10列的方格图信息 #读取输入 for i in range(15): tmap.append(list(map(int,input().split())))#从标准输入读取每行数据存入tmap for i in range(3): tmap.append([1]*10)#再存入3行都是1的方格图信息,目的是方便下面循环,保证4行板块第一行对应15行方格图最后一行时行数最大为(15+4-1)不会越界 shape = []#存储板块信息 for i in range(4): shape.append(list(map(int,input().split())))#读入板块形状数据 x = int(input())#读入板块起始列 #板块数据根据起始列从4行4列扩展到4行10列 for i in range(4): shape[i] = [0]*(x-1) + shape[i] + [0]*(10-4-(x-1)) #每行左边0的个数(x-1),右边0的个数(10-4-(x-1))。[0]*x意为列表[0,0,...]有x个0 right = 0#板块第一行最终落到的方格图行数 find = False#标记是否找到位置 #判断板块位置 for i in range(15):#遍历方格图所有行 #从第i行开始检测方格图与板块是否已经碰撞 for j in range(4):#遍历板块每一行 newline = [a+b for a,b in zip(tmap[i+j],shape[j])]#将一行的方格图每项数据与板块每项数据相加生成新行 if(2 in newline):#如果新行里出现了2,说明存在有位置方格图与板块对应数据都为1,即产生了碰撞 right = i-1#第一次出现碰撞的上一行就是板块第一行最终落到的位置 find = True#找到了 break#退出里层循环 if(i == 14): right=14#如果搜索到了最后一行,则直接确定行数 if(find):#找到了位置就退出外层循环,没找到就让板块下降一格继续循环 break #拼接方格图与板块生成最终方格图数据 for j in range(4): tmap[right+j]= [a+b for a,b in zip(tmap[right+j],shape[j])]#相当于将板块信息置入方格图 #zip()函数将两个列表各项一一对应,for a,b in zip(...)遍历两个列表的每项分别为a,b ;[a+b for a,b in ...]将每项加起来生成新的列表 #输出数据 for i in range(15): print(" ".join(map(str,tmap[i])))#map(str,tmap[i])将tmap里所有的int数据转换成str字符串用于拼接," ".join(...)将字符串列表每项中间加空格生成一个长的字符串
list(map(int,input().split()))读取一行以空格分隔的数据转换为列表:
input().split()将一行根据空格分隔为字符串列表,map(int,input().split())将字符串列表每项str字符串转化为int型生成map对象,最后list()将map对象转换为list列表,此时list中每项都是int型数据
阅读更多- python ccf题解 201609-2 火车购票
- CCF 201604-2 俄罗斯方块
- python ccf题解 201612-3 权限查询
- ccf 201604-2 俄罗斯方块
- python ccf题解 201709-3 JSON查询
- CCF CSP 编程题目和解答-----试题名称:俄罗斯方块-------201604-2
- CCF CSP认证 题解:201604-2 俄罗斯方块(Java语言原创)
- python ccf题解 201803-3 URL映射
- CCF 201604-2 俄罗斯方块
- ccf真题-201604-3-.路径解析-题解
- CCF 201604-2 俄罗斯方块
- python ccf题解 201709-2 公共钥匙盒
- CCF 201604-2 俄罗斯方块
- ccf 201604-2俄罗斯方块
- python ccf题解 201712-2 游戏
- 201604-2 俄罗斯方块(java) CCF
- CCF 201604-2 俄罗斯方块