CCF - 201604-2 - 俄罗斯方块

问题描述

试题编号: 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

思路

用一个4*2的数组记录方块的位置(x,y),每一次移动前判断每个方块位置下面是否已有方块,直到不能移动,将该数组更新到原来的图上,输出即可。

代码

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
    int i,j,a[20][15],c[4][2],left,num,b;
    for(i=1;i<=15;i++)
        for(j=1;j<=10;j++)
            cin>>a[i][j];
    for(num=0,i=1;i<=4;i++)
    {
        for(j=1;j<=4;j++)
        {
            cin>>b;
            if(b)
            {
                c[num][0] = i;
                c[num][1] = j;
                num++;
            }
        }
    }
    cin>>left;
    for(i=0;i<4;i++)
        c[i][1]+=left-1;
    while(1)
    {
        for(i=0;i<4;i++)
            if(a[c[i][0]+1][c[i][1]])
                goto there;
        for(i=0;i<4;i++)
            c[i][0]++;
    }
    there:
    for(i=0;i<4;i++)
        a[c[i][0]][c[i][1]]=1;
    for(i=1;i<=15;i++)
    {
        for(j=1;j<=10;j++)
            cout<<a[i][j]<<‘ ‘;
        cout<<endl;
    }
    return 0;
}
时间: 2024-12-21 03:44:22

CCF - 201604-2 - 俄罗斯方块的相关文章

2016年CCF第七次测试 俄罗斯方块

1 //2016年CCF第七次测试 俄罗斯方块 2 // 这道小模拟题还是不错 3 // 思路:处理出输入矩阵中含1格子的行数和列数 4 // 再判是否有一个格子碰到底部,否则整体再往下移动一步,如果有一个格子不能移动,要返回到前一步 5 6 #include <bits/stdc++.h> 7 using namespace std; 8 #define LL long long 9 const double inf = 123456789012345.0; 10 const LL MOD

CCF 201604-2 俄罗斯方块 (模拟)

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

CCF签到汇总(JAVA版本,2013-12~2018-12)

CCF签到题,没有提到分数的题目都是100分,不然会额外提出,样例输入都单独文本复制粘贴了,这样你们测试的时候很方便粘贴用例,不用自己手敲,都是一些签到题.但有好的基础,会多的数据结构,好的数学思想,那么这些都是一些很简单的问题.因为java版本不多,所以仅供参考,以下代码的思路都很简单,很多都直接通过题目面向过程,有更好的想法,或者你我有些题没有满分的改进方式都可以交流. CCF300分的线,1.2题需要拿满,最低也要190,第三题是理解题,很多时候考你的语文能力更多,第四题是规律性更强的题,

很棒的计算机入门课程:公开课从与非门到俄罗斯方块(第二部分)

博客中的文章均为meelo原创,请务必以链接形式注明本文地址 Build a Modern Computer from First Principles: Nand to Tetris Part II (project-centered course) by: Noam Nisan & Shimon Schocken from: Hebrew University of Jerusalem 课程链接:https://www.coursera.org/learn/nand2tetris2/home

CCF 201503-4 网络延时

题目来自2015年03月CCF计算机职业资格认证考试 问题描述 给定一个公司的网络,由n台交换机和m台终端电脑组成,交换机与交换机.交换机与电脑之间使用网络连接.交换机按层级设置,编号为1的交换机为根交换机,层级为1.其他的交换机都连接到一台比自己上一层的交换机上,其层级为对应交换机的层级加1.所有的终端电脑都直接连接到交换机上. 当信息在电脑.交换机之间传递时,每一步只能通过自己传递到自己所连接的另一台电脑或交换机.请问,电脑与电脑之间传递消息.或者电脑与交换机之间传递消息.或者交换机与交换机

俄罗斯方块

俄罗斯方块游戏自动机 <用electron制作俄罗斯方块游戏> 后续文章,智能程序玩俄罗斯方块游戏. 背景 前不久用ES6完成了基本的俄罗斯方块游戏,今天已经完成了一个初步的智能算法,可以自动玩俄罗斯方块了,让自己的想法朝实现更近了一步. 效果图 第一次运行,消除了1398行,窃喜! 程序结构 主要关注智能算法,结构简单化,全部放在了index.js中. 用定时器驱动游戏 function autoPlayClick(){ isAutoPlay = document.getElementByI

C语言:俄罗斯方块

大一下学期,第一节c语言课程设计,老师分享了一个基于C语言的俄罗斯方块的游戏,让我们感受. 如果你想用Mac系统跑的话,也不是不行,但是得解决一些问题.在语言程序中#include<windows.h>这个是基于windows下的头文件,用在Mac的Xcode软件会出现Symbol not found的问题.自己百度了一下,一个是装虚拟机,另一个是把报错的地方修改成Xcode的代码,不用windows特有代码.还有一个就是定义了一个全局的变量,让工程不走windows.h.用Mac的同学们可以

关于俄罗斯方块游戏软件C语言初步感受

C语言课程设,老师先给我们发了一个使用C语言做的飞机游戏,第一次看到用C语言做的游戏,虽然画面简陋,但却是真正的游戏.后老师又给我们发了用C语言做的俄罗斯方块的游戏 int x;     //中心方块的x轴坐标 int y;     //中心方块的y轴坐标 int flag;    //标记方块类型的序号 int next;    //下一个俄罗斯方块类型的序号 int speed;    //俄罗斯方块移动的速度 int count;    //产生俄罗斯方块的个数 int score;  

俄罗斯方块软件:C语言应用初步感受

C语言课程设以一节课,老师提供了一个C语言的飞机游戏让我们感受,上学期C语言课程,主要是各种语句的练习,这次是用以前的知识来感受一个实际的系统. 首先安装c-free,然后运行程序. 游戏程序看似简单,但是用C语言来实现还是第一次见,感到很惊奇. 分析一下程序,感觉没有太复杂的,就是上学期学习的简单语句的组合,但是运用的非常好.首先看看用到了几种语句: 1.首先是在屏幕上显示的语句printf printf("俄罗斯方块"); gotoxy(hOut,FrameX+2*Frame_wi