201604-2 俄罗斯方块
题目
思路
我的思路很暴力,一行一行试,碰上了就停。
AC代码如下
#include<cstdio>
int main(){
int a[16][11],b[4][4],n;
for(int i=1;i<16;i++)
for(int j=1;j<11;j++)
scanf("%d",&a[i][j]);
int h,low=0;//h记录小方块有效的最下面一层
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
scanf("%d",&b[i][j]);
if(b[i][j]) h=i;
scanf("%d",&n);
while(low<15){//low表示方块有效的最下面一层能够降落到的位置(行数)
bool crushed=false;
for(int i=0;h-i>=0&&low-i>=0&&!crushed;i++){//一行一行试,碰上就停
for(int j=0;j<4;j++){
if(a[low+1-i][j+n]&&b[h-i][j]) {
crushed=true;
break;
}
}
}
if(crushed) break;
low++;
}
for(int i=0;i<=h;i++){
if(low-i<1) break;
for(int j=0;j<4;j++) a[low-i][j+n]+=b[h-i][j];//可通过相加以赋值
}
for(int i=1;i<16;i++){//输出
for(int j=1;j<10;j++){
printf("%d ",a[i][j]);
}
printf("%d\n",a[i][10]);
}
return 0;
}