问题描述
试题编号: | 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 |
代码展示:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[15][10];
int b[4][4];
int col;
for(int i=0;i<15;i++){
for(int j=0;j<10;j++)
cin>>a[i][j];
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++)
cin>>b[i][j];
}
cin>>col;
int m[4]={0}; //记录方块的高度
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(b[j][i]==1) m[i]=j+1;
}
}
int f[4]={0}; //记录原有方块的高度
for(int i=col-1;i<col+3;i++){
for(int j=0;j<15;j++){
if(a[j][i]==1) {
f[i-col+1]=15-j;
break;
}
}
}
int max=0; //记录方块落下后的最大高度
for(int i=0;i<4;i++){
if(m[i]!=0&&m[i]+f[i]>max){
max=m[i]+f[i];
}
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(b[i][j]){
a[i+15-max][j+col-1]=1; //开始移动
}
}
}
for(int i=0;i<15;i++){
for(int j=0;j<10;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}