文章

34

粉丝

0

获赞

6

访问

1.0k

头像
2048游戏 题解:
P1472
发布于2025年8月4日 22:05
阅读数 47

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

void merge(int *b){
	int front = b[0];
	int flag = 0; // front是否为合并后的结果
	for(int i = 1; i < 4; i++){
		if(!flag && front == b[i]){
			b[i - 1] *= 2;
			b[i] = 0;
			flag = 1;
		}else{
			front = b[i];
			if(flag) flag = 0;
		}
	}
	
	// 将b数组紧缩,大于0的数字向前靠拢
	int i = 0;
	for(int j = 0; j < 4; j++){
		if(b[j] == 0) continue;
		else b[i++] = b[j];
	}
	while(i < 4) b[i++] = 0;	
	
}

int main(){
	
	int n; cin >> n;
	
	int a[4][4] = {0};
	
	for(int i = 0; i < 4; i++)
		for(int j = 0; j < 4; j++) cin >> a[i][j];
	
	if(n == 1){
		// 向上
		for(int j = 0; j < 4; j++){
			int b[4] = {0};
			int cnt = 0;
			for(int i = 0; i < 4; i++){
				if(a[i][j] == 0) continue;
				b[cnt++] = a[i][j];
			}
			// 进行合并
			merge(b);
			for(int i = 0; i < 4; i++){
				a[i][j] = b[i];
			}
		}
	}
	else if(n == 2){
		// 向下
		for(int j = 0; j < 4; j++){
			int b[4] ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发