CCF认证题——俄罗斯方块
来源:互联网 发布:gre数学难吗 知乎 编辑:程序博客网 时间:2024/06/05 08:20
试题编号:201604-2试题名称:俄罗斯方块时间限制:1.0s内存限制:256.0MB问题描述:
问题描述
俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏。
游戏在一个15行10列的方格图上进行,方格图上的每一个格子可能已经放置了方块,或者没有放置方块。每一轮,都会有一个新的由4个小方块组成的板块从方格图的上方落下,玩家可以操作板块左右移动放到合适的位置,当板块中某一个方块的下边缘与方格图上的方块上边缘重合或者达到下边界时,板块不再移动,如果此时方格图的某一行全放满了方块,则该行被消除并得分。
在这个问题中,你需要写一个程序来模拟板块下落,你不需要处理玩家的操作,也不需要处理消行和得分。
具体的,给定一个初始的方格图,以及一个板块的形状和它下落的初始位置,你要给出最终的方格图。
游戏在一个15行10列的方格图上进行,方格图上的每一个格子可能已经放置了方块,或者没有放置方块。每一轮,都会有一个新的由4个小方块组成的板块从方格图的上方落下,玩家可以操作板块左右移动放到合适的位置,当板块中某一个方块的下边缘与方格图上的方块上边缘重合或者达到下边界时,板块不再移动,如果此时方格图的某一行全放满了方块,则该行被消除并得分。
在这个问题中,你需要写一个程序来模拟板块下落,你不需要处理玩家的操作,也不需要处理消行和得分。
具体的,给定一个初始的方格图,以及一个板块的形状和它下落的初始位置,你要给出最终的方格图。
输入格式
输入的前15行包含初始的方格图,每行包含10个数字,相邻的数字用空格分隔。如果一个数字是0,表示对应的方格中没有方块,如果数字是1,则表示初始的时候有方块。输入保证前4行中的数字都是0。
输入的第16至第19行包含新加入的板块的形状,每行包含4个数字,组成了板块图案,同样0表示没方块,1表示有方块。输入保证板块的图案中正好包含4个方块,且4个方块是连在一起的(准确的说,4个方块是四连通的,即给定的板块是俄罗斯方块的标准板块)。
第20行包含一个1到7之间的整数,表示板块图案最左边开始的时候是在方格图的哪一列中。注意,这里的板块图案指的是16至19行所输入的板块图案,如果板块图案的最左边一列全是0,则它的左边和实际所表示的板块的左边是不一致的(见样例)
输入的第16至第19行包含新加入的板块的形状,每行包含4个数字,组成了板块图案,同样0表示没方块,1表示有方块。输入保证板块的图案中正好包含4个方块,且4个方块是连在一起的(准确的说,4个方块是四连通的,即给定的板块是俄罗斯方块的标准板块)。
第20行包含一个1到7之间的整数,表示板块图案最左边开始的时候是在方格图的哪一列中。注意,这里的板块图案指的是16至19行所输入的板块图案,如果板块图案的最左边一列全是0,则它的左边和实际所表示的板块的左边是不一致的(见样例)
输出格式
输出15行,每行10个数字,相邻的数字之间用一个空格分隔,表示板块下落后的方格图。注意,你不需要处理最终的消行。
样例输入
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
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
样例输出
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 1 1 1 1 1 1 1
0 0 0 0 1 1 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 1 1 1 1 1 1 1
0 0 0 0 1 1 0 0 0 0
做这道题的时候被题目中最后一个输入的数的意思的描述困惑了,也是颇有些尴尬。其实这道题还是比较简单的,逻辑上比较清晰。就是不断判断能否继续往下移动一个单位。用Java代码实现如下。
import java.util.*;public class Main {private static int[][] board = new int[15][10];private static int[][] block = new int[4][4];private static int start;public static void main(String[] args) {// TODO Auto-generated method stubScanner in = new Scanner(System.in);for(int i = 0;i<15;i++){for(int j = 0;j<10;j++){board[i][j] = in.nextInt();}}for(int i = 0;i<4;i++){for(int j = 0;j<4;j++){block[i][j] = in.nextInt();}}start = in.nextInt();int[][] location = new int[4][2];int num = 0;for(int i = 0;i<4;i++){for(int j = 0;j<4;j++){if(block[i][j]==1){location[num][0] = i;location[num][1] = j + start -1;num++;}}}while(location[3][0]<14){if(board[location[0][0]+1][location[0][1]]==0&& board[location[1][0]+1][location[1][1]]==0&& board[location[2][0]+1][location[2][1]]==0&& board[location[3][0]+1][location[3][1]]==0){location[0][0]++;location[1][0]++;location[2][0]++;location[3][0]++;}else{break;}}for(int i = 0;i<4;i++){board[location[i][0]][location[i][1]] = 1;}for(int i = 0;i<15;i++){for(int j = 0;j<10;j++){System.out.print(board[i][j]+" ");}System.out.println();}}}
在eclipse中运行截图如下所示
阅读全文
0 0
- CCF认证题——俄罗斯方块
- CCF——俄罗斯方块
- CCF认证 201604 俄罗斯方块
- CCF —俄罗斯方块 20160402
- CCF认证201604-2 俄罗斯方块
- CCF认证 201604-2 俄罗斯方块
- CCF认证 俄罗斯方块下落问题
- CCF认证题——打酱油
- CCF软件能力认证201604俄罗斯方块
- CCF —— CSP认证
- CCF认证模拟题——分蛋糕
- CCF认证模拟题——学生排队
- 201604-2 试题名称:俄罗斯方块(100分)ccf认证
- CCF 俄罗斯方块
- CCF 俄罗斯方块
- ccf 俄罗斯方块
- CCF俄罗斯方块
- 【CCF 俄罗斯方块】
- mysql忘记root密码
- ORF-出站路由过滤
- 同一个表中的数据怎么进行比较
- 重学数据结构 顺序表的添加 删除 算法2.4和2.5
- 推荐系统学习笔记之二 基于内容的推荐系统(CBRS)+Collaborative Filtering 协同过滤
- CCF认证题——俄罗斯方块
- hashmap排序
- 费纳姆密码-二进制密码
- 【eclipse】eclipse属性配置(背景色字体等)文件的导入导出方法
- 16元日薪,从阿里云雇佣一个专家阿里云中小企业AI产品码栈解析
- Linux下的网络访问与权限
- 30分钟了解Enterprise Architect
- 容器技术与虚拟化技术理解
- 使用WebUploader客户端批量上传图片,后台使用springMVC接收实例