CCF20160402——俄罗斯方块
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[16][10];//初始方格图
int b[4][4];//新加入板块图
int x;//新加入板块开始的列
for(int i=0;i<15;i++)
{
for(int j=0;j<10;j++)
{
cin>>a[i][j];
}
}
for(int i=0;i<10;i++)
a[15][i]=1;//确定一个边界 ,不确定这个边界只有90分
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
cin>>b[i][j];
}
}
cin>>x;
int flag=0;//记录能不能落下
for(int i=0;;i++)
{
for(int j=0;j<4;j++)
{
for(int k=x-1,l=0;k<x+3;k++,l++)//遍历板块和原网格
{
if(a[i+j][k]==1&&b[j][l]==1)//当原空格和板块都为1,记为flag=1,不可以落下,跳出循环,此时要往上一行
{
flag=1;
}
}
}
if(flag==1)//往上一行i--
{
i--;
for(int j=0;j<4;j++)
{
for(int k=x-1,l=0;k<x+3;k++,l++){
a[i+j][k]=max(a[i+j][k],b[j][l]);
}
}
break;//如果不break;就会陷入死循环
}
}
for(int i=0;i<15;i++)
{
for(int j=0;j<10;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}