文章

11

粉丝

410

获赞

9

访问

103.5k

头像
(1472)此题核心在于问题分解。(已修改)
P1472
发布于2020年3月12日 23:32
阅读数 8.4k

结合图例来说明。    输入

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;
						}	
					} 	
				}
			}
		}
...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发