文章

4

粉丝

32

获赞

0

访问

1.8k

头像
2048游戏 卡80%已解决:题目理解
P1472
发布于2024年8月21日 17:47
阅读数 645

注意中间有0相隔也合并,我原以为只有相邻不隔0才合并就卡80%了

#include<stdio.h>
#include<string.h>
void move(int a[4][4]){//向下移动函数,下侧和右侧各留了一条全0的空行和空列 
	for(int i=0;i<4;i++){
		for(int j=0;j<4;j++){//从每列的最上边开始向下走 
		if(a[j][i]!=0){//若不为0则寻找下一个相同数
			for(int z=j+1;z<4;z++){
				if( a[j][i]== a[z][i]){//相同则合并、置零、跳过已经查询过的这一段
					a[j][i]*=2;
					a[z][i]= 0;
					j=z;
					break;
				}else if( a[z][i]==0);//是0则进入下一趟循环,顺位对比
				
				else{//非0,不相同数字,则顺位寻找下一个数字的相同数 
					j=z-1;
					break;
				}	
			}
		}
	}
		//e为空位数组,存放的是空位的位置
		//如果有新增空位则把这个空位加上去
		//已经用过的空位不需要删除,因为signal标志位会向后移动,前边的就不管了 
		int signal=0;//空位数组标志位,标志着遇到数字会能移动的最前面的空位 
		char e[5]={0},h[2]={0};
		for(int j=0;j<4;j++){
			if(a[j][i]==0){//有空位,链接到e上 
				h[0]=j+'0';
				strcat(e,h);
			}
			if(strlen(e)>0 && a[j][i]!=0){//有数且有空位,数字移动到空位,本位置空,新增e空位为本位,signal后移一位 
				h[0]=j+'0';
				strcat(e,h);
				a[e[signal]-'0'][i]=a[j][i];
				a[j][i]=0;
				signal+=1;
			}
		}
	}
}

v...
登录查看完整内容


登录后发布评论

2 条评论
snake VIP
2024年8月21日 18:14

往右的时候有问题

赞(0)

xyfyoho : 回复 snake: 已解决,题目理解问题,我原以为只有挨着的才合并,有0相隔的没合并

2024年8月21日 19:14