CCF_俄罗斯方块

在这里插入图片描述

#include<stdio.h> 
int main(){
	int i,n,a[21][11],j;
	for(i=0;i<15;i++)
		for(j=0;j<10;j++)
		scanf("%d ",&a[i][j]);//输入原始界面 
	struct Box{
		int start=-1;//一行开始坐标 
		int count=0;//改行的方块数 
	};//表示一行的信息 
	Box b[5];
	int temp[5][5];
	int h,l,c=0;
	for(i=0;i<4;i++){
		for(j=0;j<4;j++){
			scanf("%d",&temp[i][j]);
			if(temp[i][j]!=0){
				if(c==0) 
				h=i;
				c++;
				if(b[i].count==0)
				b[i].start=j;
				b[i].count++;
				l=i;
			}
		}
	}
	
	int left=3;
	for(i=0;i<4;i++)
	if(b[i].start<left&&b[i].start!=-1)
	left=b[i].start;
	
	c=l-h+1;//算出方块所占行数 
	int p,flag,temp1=c,temp2=l;
	scanf("%d",&p);//起始位置 从0 开始 
	
	for(i=14;i>=0&&c>0;i--){//从下往上扫描 i行 
		flag=0;	
		for(j=p+b[l].start-left;j<b[l].start-left+p+b[l].count;j++){ 
			//j列 p最左边的位置 b[l].start 输入块最后一行的 下标 
			if(a[i][j]!=0){//容不下我  
				flag=1;//标记 
				break;//退圈 
			}
		}
		if(flag==0){//第i行可以容下输入块的l行 
			c--;//剩余行数减一 
			l--;//继续比较上面的 
		}
		else {
			c=temp1;
			l=temp2;
		} 
	}
	if(c<=0){//如果原始块中有某一块地方容得下输入块
		for(i=i+1;temp1>0;i++){
			for(j=p+b[h].start-left;j<b[h].start-left+p+b[h].count;j++)
			a[i][j]=1;
			h++;
			temp1--;
		}
	}
		for(i=0;i<15;i++){
			for(j=0;j<10;j++){
			printf("%d ",a[i][j]);//输出变换后的界面 
			}
			printf("\n");
		}

	return 0;
}
  • 得分10,明明测试能通过也不知道哪里没合他老人家的心意,挂一下。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值