问题描述
试题编号: | 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 |
思路
用一个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;
}