#CCF——CSP俄罗斯方块(C++)
满分代码如下:
#include<iostream>
using namespace std;
int a[16][10],b[5][5];
int main(){
int lie,hang=0,di;
for(int i=1;i<=15;i++){
for(int j=1;j<=10;j++) cin>>a[i][j];
}
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++){
cin>>b[i][j];
if(b[i][j]) di=i;//坑处所在
}
}
di=15-di;
cin>>lie;
while(hang<=di){//所以这里下降的限制改变了
int flag=0;
hang++;
for(int i=4;i>0;i--){
for(int j=1;j<5;j++){
if(a[hang+i][lie+j-1]&&b[i][j]){
flag++;
break;
}
}
if(flag) break;
}
if(flag) break;
}
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++){
a[hang+i-1][lie+j-1]+=b[i][j];
}
}
for(int i=1;i<=15;i++){
for(int j=1;j<=10;j++) cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
感觉自己写的比较混乱昂。。。
有一个坑需要注意的是如果方块最后一行全为0是还可以下降的,所以程序里有一个di变量,就是为了防止这个坑。