文章
11
粉丝
410
获赞
9
访问
108.8k
结合图例来说明。 输入
3
0 2 2 0
2 0 2 0
2 0 2 2
2 2 0 2
输出
4 0 0 0
4 0 0 0
4 2 0 0
4 2 0 0
由此例可知。 第一行直接扫面
/*读题可知,核心部分就是要解决合并,易位两部。 以此例来说
合并很好解决,只需要设置一组循环,逐行解决移动后相邻且相同即可。如果此数和下一位非零不相邻,则立即寻找后续的第一次出现的相同数。 请看例子里的第一行和第二行输入。 第一行属于下一位相同且相邻,第二行属于需要往后的情况。 所以综合来看就是,行的第一个非零元素作为比较的起点。找到相同的元素则终止。
另一个就是易位。以某一行为例。先看易位的要求是什么。就是某方向有零就用后面的第一次出现的不为零的覆盖(切记要及时跳出)。接着我们直接从头开始,对着这一行进行循环即可。
解决了,关键的两部,剩下的就是不断重复,调整上下左右顺序即可。*/
#include
using namespace std;
int t[5][5]={0};
//1
void one(){
for( int col=1; col<=4; col++){
for( int line=1; line<4; line++){
if( t[line][col]!=0){
for( int z=line+1; z<=4; z++){
if( t[line][col]== t[z][col]){//peng
t[line][col]*=2;
t[z][col]= 0;
line=z;
break;
}else if( t[z][col]==0){ //0
;
}else{//非0,不相同数字
line=z-1;
break;
}
}
}
}
}
...
登录后发布评论
暂无评论,来抢沙发