试题编号: | 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>
using namespace std;
int main()
{
int Ans[20][10],Sec[4][4],Column=0;
for(int i=0; i<15; i++)
{
for(int j=0; j<10; j++)
{
cin>>Ans[i][j];
}
}
for(int i=0; i<4; i++)
{
for(int j=0; j<4; j++)
{
cin>>Sec[i][j];
}
}
cin>>Column;
Column--;
int Row=0,Flag=0;
while(Row<15)
{
for(int i=0; i<4; i++)
{
for(int j=0; j<4; j++)
{
if(Ans[Row+i][Column+j]==0)
{
Ans[Row+i][Column+j]+=Sec[i][j];
if(Ans[Row+i][Column+j]==1&&(Row+i+1)==15)
{
Ans[Row+i][Column+j]-=Sec[i][j];
Flag=Row;
break;
}
}
else
{
Ans[Row+i][Column+j]+=Sec[i][j];
if(Ans[Row+i][Column+j]==2)
{
Flag=Row-1;
Ans[Row+i][Column+j]-=Sec[i][j];
break;
}
}
Ans[Row+i][Column+j]-=Sec[i][j];
}
if(Flag!=0)
break;
}
if(Flag!=0)
break;
Row++;
}
for(int i=0; i<4; i++)
{
for(int j=0; j<4; j++)
{
Ans[Flag+i][Column+j]+=Sec[i][j];
}
}
for(int i=0; i<15; i++)
{
for(int j=0; j<10; j++)
cout<<Ans[i][j]<<" ";
cout<<endl;
}
return 0;
}
/*
1输入整个矩阵、方块和下落的位置
2从第一行开始模拟下落的过程
2.1方块的有效点和矩阵的有效点重叠或者方块的有效点会超出底边 记录行值 退出模拟
3从2中得到的行值开始将矩阵与方块进行相加
4输出矩阵
*/