问题描述:

试题编号: 201604-2
试题名称: 俄罗斯方块
时间限制: 1.0s
内存限制: 256.0MB
问题描述:

问题描述

  俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏。
  游戏在一个15行10列的方格图上进行,方格图上的每一个格子可能已经放置了方块,或者没有放置方块。每一轮,都会有一个新的由4个小方块组成的板块从方格图的上方落下,玩家可以操作板块左右移动放到合适的位置,当板块中某一个方块的下边缘与方格图上的方块上边缘重合或者达到下边界时,板块不再移动,如果此时方格图的某一行全放满了方块,则该行被消除并得分。
  在这个问题中,你需要写一个程序来模拟板块下落,你不需要处理玩家的操作,也不需要处理消行和得分。
  具体的,给定一个初始的方格图,以及一个板块的形状和它下落的初始位置,你要给出最终的方格图。

输入格式

  输入的前15行包含初始的方格图,每行包含10个数字,相邻的数字用空格分隔。如果一个数字是0,表示对应的方格中没有方块,如果数字是1,则表示初始的时候有方块。输入保证前4行中的数字都是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 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

解题思路:

这是一个模拟题,模拟俄罗斯方块游戏中,小方块下落的过程。该问题比实际的俄罗斯方块游戏简单多了。关键在于数据表示,然后就是模拟小方块的下落过程。

说明:  

数组board[]用来存储俄罗斯方块游戏的方格。底边另外放一行1,可以简化处理程序的逻辑。

数组block[]用于存小方块。输入时使用该数组。

数组coords[]用于存储小方块中为1元素的坐标。用这个进行模拟处理可以加快速度。

需要注意下标间的变换问题,略去程序处理逻辑的说明。

解题代码:

#include <iostream>
const int ROW = 15;
const int COL = 10;
const int N = 4;
int board[ROW+1][COL];
int block[N][N];
struct {int row, col;
} coords[N];
using namespace std;
int main(){int row, col;// 输入数据for(int i=0; i<ROW; i++)for(int j=0; j<COL; j++)cin >> board[i][j];for(int i=0; i<N; i++)for(int j=0; j<N; j++)cin >> block[i][j];cin >> col;// 底边全放1for(int j=0; j<COL; j++)board[ROW][j] = 1;// 提取小方块坐标int k = 0;for(int i=N-1; i>=0; i--)for(int j=0; j<N; j++)if(block[i][j] == 1) {coords[k].row = i;coords[k].col = j;k++;}// 模拟小方块落下过程row = 1;col--;bool checkflag;for(;;) {checkflag = false;for(int i=0; i<N; i++)if(board[row + coords[i].row][col + coords[i].col] == 1) {checkflag = true;break;}if(checkflag)break;row++;}row--;// 合并小方块到方格for(int i=0; i<N; i++)board[row + coords[i].row][col + coords[i].col] = 1;// 输出结果for(int i=0; i<ROW; i++) {for(int j=0; j<COL; j++) {if(j != 0)cout << " ";cout << board[i][j];}cout << endl;}return 0;
}

CCF201604-2 俄罗斯方块相关推荐

  1. CCF201604-2 俄罗斯方块(100分)

    试题编号: 201604-2 试题名称: 俄罗斯方块 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏. 游戏在一个1 ...

  2. python编的俄罗斯方块游戏下载_python写的俄罗斯方块游戏

    python写的俄罗斯方块游戏 功能包括:记录所花费时间;消去的总行数;总分;排行榜,最高记录查看等. 排行榜中包含一系列的统计功能,如单位时间消去的行数,单位时间得分等. from Tkinter ...

  3. GitHub开源的超逼真俄罗斯方块游戏

    俄罗斯方块一直是各类程序语言热衷实现的经典游戏,有很多JavaScript实现版本,本开源项目使用React实现. 项目试玩网址:https://chvin.github.io/react-tetri ...

  4. Python实现俄罗斯方块

    目录 1.外形设计 2.方块设计 3.停靠设计 俄罗斯方块是儿时最经典的游戏之一,刚开始接触 pygame 的时候就想写一个俄罗斯方块.但是想到旋转,停靠,消除等操作,感觉好像很难啊,等真正写完了发现 ...

  5. AI玩俄罗斯方块(Python实现)

    目录 1.环境 2.实现机制(Pierre Dellacherie算法) 3.代码实现 人工智能大火的今天,如果还是自己玩俄罗斯方块未免显得太LOW,为什么不对游戏升级,让机器自己去玩俄罗斯方块呢?有 ...

  6. 如何让AI教机器自己玩俄罗斯方块?

    作者 | Ahab 转载自公众号Ahab杂货铺(ID:PythonLearningCamp) 人工智能大火的今天,如果还是自己玩俄罗斯方块未免显得太 LOW,为什么不对游戏升级,让机器自己去玩俄罗斯方 ...

  7. 500行代码写一个俄罗斯方块游戏

    导读:本文我们要制作一个俄罗斯方块游戏. 01 俄罗斯方块 Tetris 俄罗斯方块游戏是世界上最流行的游戏之一.是由一名叫Alexey Pajitnov的俄罗斯程序员在1985年制作的,从那时起,这 ...

  8. 算法帖——用舞蹈链算法(Dancing Links)求解俄罗斯方块覆盖问题

    问题的提出:如下图,用13块俄罗斯方块覆盖8*8的正方形.如何用计算机求解? 解决这类问题的方法不一而足,然而核心思想都是穷举法,不同的方法仅仅是对穷举法进行了优化 用13块不同形状的俄罗斯方块(每个 ...

  9. python俄罗斯方块算法详解_用 Python 写一个俄罗斯方块游戏 (

    @@ -2,34 +2,34 @@ > * 原文作者:[Dr Pommes](https://medium.com/@pommes) > * 译文出自:[掘金翻译计划](https://g ...

  10. pygame简单的俄罗斯方块游戏和简单的打字游戏

    1.pygame简单的俄罗斯方块游戏 一.对战的方块管理 定义一个BlockManage管理对战的方块 根据BlockManage根据传入的玩家id返回方块,保证每个玩家拿到的方块序列是一致的,所以在 ...

最新文章

  1. Boost在Linux和windows下的编译 32位 64位
  2. mysql 合并相加_mysql 多条记要判断相加减合并一条
  3. 树与二叉树 | 平衡二叉树
  4. mysql union all 等效_Mysql联合查询UNION和UNION ALL的使用介绍
  5. ptcms自动采集小说系统源码 电脑版+手机版
  6. HDMI接口 PCB布线指南-4层板为例
  7. HDOJ 1001 Sum Problem
  8. Android静态壁纸和动态壁纸的使用和理解
  9. python二级考试难不难_计算机二级python考试难吗
  10. (完美解决)应用程序无法正常启动(0xc000007b),请单击确定关闭应用程序的解决方案
  11. BZOJ 3470 Freda’s Walk (期望)
  12. 支付宝企业付款PHP版本(转账到支付宝账户)
  13. Java单元测试实践-06.Mock后Stub静态方法
  14. 和免疫荧光标记说拜拜 | 谷歌Cell论文:深度学习模型预测荧光位置
  15. 画直方图(hist)
  16. linux文件写入失败 没有空间,write()调用失败:设备上没有剩余空间:ENOSPC处理...
  17. MAC压缩的文件在win下减压出来是空文件夹
  18. 自学软件测试如何得到项目经验,这是我摸爬滚打的实战经验谈...
  19. windows 11 访问带SMB的文件服务器(小米路由器)
  20. 易语言文本_解密c,易语言动态加解密例子源码

热门文章

  1. 加速你的Hibernate引擎(下)
  2. 通过Qos 策略来对P2P限速
  3. 如何从菜鸟成长为高手!
  4. Vue为何采用异步渲染
  5. Js模块化开发的理解
  6. php软件开发--redis操作
  7. 编程语言在中国哪种职位最多_您使用最多的是哪种“古老”编程语言?
  8. 线上排查 | 线上Redis负载暴涨100%,业务中断,这样排查很赞!
  9. CSS IE6躲猫猫Bug
  10. linux追加SQL结果到文件,RAC环境下误操作将数据文件添加到本地存储