2012年华为杯校园编程大赛决赛题目

2012年华为杯校园编程大赛决赛

类别:软件C/C++语言

编程题(共1题,100分。请上机编写程序,按题目要求提交文件。测试用例不对考生公开,凡不满足提交要求导致不能运行或用例不通过,不予评分。)

1.       俄罗斯方块之棋盘覆盖

俄罗斯方块是一款风靡全球的益智类游戏。由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。

 

本试题是在俄罗斯方块几种常见的方块基础上,在指定大小和障碍的棋盘上,用标准的方块形状,完成对棋盘的覆盖。用于覆盖棋盘的方块可以是下文所给出方块的全集,也可以是其中的任意一个子集,且使用的方块数量不限,形状变化不限。

 

l 棋盘大小:

棋盘大小为2121列的正方形。按照从上到下,从左到右,从1开始,依次进行编号,直到最右下方的格子标识为441

l 可选方块:

可选方块为标准的俄罗斯方块形状,包括其标准的旋转变化。基本形状如图所示:

各形状的变化如图所示(字母为方块编号):

a          b

 

c   d

 

e          f

g

 

l 障碍说明:

棋盘上仅有一处障碍无法放置方块,障碍可处于棋盘任意位置。障碍为基本形状a及其所有的旋转变化,如图所示:

 

l 输入输出要求:

输入文件名为testin.txt,格式如下所示,各数字用空格隔开,各数字表示棋盘格子编号。

2 3 22 23

该输入表示障碍位于棋盘的左上角。

输出文件名为testout.txt,要求先输出棋盘覆盖结果,再输出未覆盖的格子个数。输出棋盘用2121列数字/字母表示,其中0表示未覆盖的格子,1表示障碍,字母表示对应方块编号(字母对应关系见“可选方块”一节)。最后输出未覆盖格子个数。这里以610列棋盘举例示意输出格式(注意:实际输出应该是2121列,对应方块形状用对应的字母表示):

0 e 0 0 0 0 f f f f

e e 0 0 0 1 1 g g g

e 0 0 0 1 1 0 0 0 g

a 0 0 0 c 0 d d 0 0

a a 0 0 c 0 d d b 0

0 a 0 0 c c 0 b b b

28

 

 

 

l 要求:

1、 用所提供的方块尽可能覆盖棋盘并输出结果;

2、 在(1)的基础上,棋盘上的空格越少越好。

 

 

 

你可能感兴趣的:(2012年华为杯校园编程大赛决赛题目)