CSP思路,201604-2俄罗斯方块

思路:输入依旧采用二元数组

解题:我思考的是,模拟俄罗斯方块的下落过程,将下落方块从下到上遍历,每次遍历到值为1(既有方块的时候)根据此时的i,j修改方格图中的坐标,首先需要判断方格图中的条件,如果是0,则改为1,如果是1(已经有方块了)则方格图再往上一行继续遍历,完成后输出就可以。

缺陷:提交代码测评只有10分,我感觉应该是程序中下落的俄罗斯方块没有连成一个整体,反而像是填沙子那种有空隙就可以往下落,在考虑可不可以加结构体,目前先记录到这。

代码如下:

#include<bits/stdc++.h>
using namespace std;
int n;//保存初始下落列数 
int arr1[16][11];//保存方格 
int arr2[5][5];//保存下落图形 
int main(){
    for(int i=0;i<15;i++){
        for(int j=0;j<10;j++){
                cin>>arr1[i][j];
        }
    }
    for(int i=0;i<4;i++){
        for(int j=0;j<4;j++){
            cin>>arr2[i][j];
        }
    }
    cin>>n;
    //从下往上遍历落下的方块,将方块放置到方块图中合适的位置 
    for(int i=3;i>=0;i--){
        for(int j=3;j>=0;j--){
            if(arr2[i][j]==1){
            bool ok=false;
                for(int k=i+12;k--;k>=0){
                    if(arr1[k][j+n-1]==0&&ok==false){
                        arr1[k][j+n-1]=1;
                        ok=true;
                    }
                }
            }
        }
    }
    //输出方格图 
    for(int i=0;i<15;i++){
        for(int j=0;j<10;j++){
            cout<<arr1[i][j]<<" ";
        }
        cout<<endl;
    }
    
}

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值