文章
4
粉丝
32
获赞
0
访问
1.8k
注意中间有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...
登录后发布评论
往右的时候有问题