文章

40

粉丝

0

获赞

56

访问

8.9k

头像
2048游戏 题解:C++ 简化为一个只含4个数的一维数组
P1472
发布于2025年8月20日 16:20
阅读数 42

#include<bits/stdc++.h>
using namespace std;

// 通过将矩阵分解为一行四个数组,从而达到每次只需要处理一个数组即可 
void merge(int b[]){
	int flag=0,front=b[0];
	for(int i=1;i<4;i++){
		if(!flag&&front==b[i]){
			b[i-1]+=b[i-1]; // 合并操作 
			b[i]=0; // 将合并后的后位置数归0 
			flag=1; // 标记已经合并 
		}else{
			front=b[i];
			flag=0;
		}
	}
	
	// 经过上面的操作已经使得数组向左合并,但是合并过程中会产生新的0
	// 下面进行二次去0
	int i=0;
	for(int j=0;j<4;j++){
		if(b[j]!=0){
			b[i]=b[j];
			i++;
		}
	}
	// 在后面进行补0操作 
	while(i<4){
		b[i]=0;
		i++;
	}
}

int main(){
	int n,num[4][4],b[4];
	cin>>n;
	for(int i=0;i<4;i++){
		cin>>num[i][0]>>num[i][1]>>num[i][2]>>num[i][3];
	}
	
	// 上
	if(n==1){
		for(int j=0;j<4;j++){
			int a=0; 
			for(int i=0;i<4;i++){
				// 需要注意的是这里只需要提取非0的即可
				if(num[i][j]!=0){
					b[a]=num[i][j];
					a++;
				} 
			}
			while(a<4){
				b[a]=0;
				a++;
			}
			merge(b);
			for(int i=0;i<4;i++){
				num[i][j]=b[i];
		...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发