试题编号: | 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 |
c++:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[15][10]={0};//初始方格图
int ak[10]={0};//记录初始方格图每一列上部的空格
int b[4][4]={0};//新加入的版块
int bk[4]={0};//记入新加入的版块每一列下部的空格
int begincol;//新板块数组的第0列,与初始方格图begincol-1列对齐
for(int row=0;row<15;row++){
for(int col=0;col<10;col++){
cin>>a[row][col];
if(a[row][col]==0 && ak[col]==row) ak[col]++;
}
}
for(int row=0;row<4;row++){
for(int col=0;col<4;col++){
cin>>b[row][col];
if(b[row][col]==0) bk[col]++;
else bk[col]=0;
}
}
cin>>begincol;
//新板块下方的空格+初始板块的上部空格,求出其中的最小和,即为新板块下落的最大值;
int maxdown=0;
for(int col=0;col<4;col++){
if(bk[col]==4) bk[col]=19;
else bk[col]+=ak[col+begincol-1];
if(col==0) maxdown=bk[col];
else if(bk[col]<maxdown) maxdown=bk[col];
}
//计算出新板块中的小块在初始板块中的位置
for(int row=0;row<4;row++){
for(int col=0;col<4;col++){
if(b[row][col]!=0) a[maxdown-4+row][col+begincol-1]=1;
}
}
//打印输出合并后的图形
for(int row=0;row<15;row++){
for(int col=0;col<10;col++){
cout<<a[row][col]<<" ";
}
cout<<endl;
}
return 0;
}