PTA 一维数组 7-6 2048游戏模拟(1)单行向左移动叠加

《2048》 是一款比较流行的数字游戏,最早于2014年3月20日发行。这款游戏的玩法很简单,每次可以选择上下左右滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢,系统也会在空白的地方乱数出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。不断的叠加最终拼凑出2048这个数字就算成功。 本题模拟2048游戏的规则,提供一行4个格子,输入每个格子的初始值(空白格子值为0),玩家选择向左移动一次,所有数字向左靠拢,相同的数字相撞时会叠加。移动结束后,输出叠加后的数值。

输入格式:

输入4个整数,分别表示4个格子中的数值,数据之间用空格分隔。

输出格式:

在一行输出向左移动一次叠加后的4个数,每个数之间有一个空格,行末无空格。

输入样例1:

2 0 2 2 

结尾无空行

输出样例1:

4 2 0 0

结尾无空行

输入样例2:

2 2 2 2 

结尾无空行

输出样例2:

4 4 0 0

结尾无空行

示例答案:

#include
int main() {
	int a[4];
	int i, valid, k, pop, qwe = 0, cn = 0, t = 0, qqq;
	for (i = 0; i < 4; i++) {
		scanf("%d", &a[i]);
	}//输入字符到数组内
	
	for (i = 0; i < 4 - t; i++) {
		if (a[i] == 0) {
			pop = i;
			valid = 1;
			cn++;
			qwe = 1;
		}
		if (valid == 1) {
			if (pop < 3) {
				for (k = pop; k < 3; k++) {
					a[k] = a[k + 1];
				}
			}
			valid = 0;
		}
		if (qwe != 0) {
			i--;
			qwe = 0;
		}
		t++;
	}//把0移除
	
	if (cn != 0) {
		for (i = 0; i < cn; i++) {
			a[3 - i] = 0;
		}
	}//把末尾补零
	
	for (i = 0, cn = 0; i < 3; i++) {
		if (a[i] == a[i + 1]) {
			a[i] = 2 * a[i];
			cn++;
			for (k = i + 1; k < 3; k++)
				a[k] = a[k + 1];
		}//相同的合并,之后的整体前移
		
		if (cn != 0) {
			for (qqq = 0; qqq < cn; qqq++) {
				a[3 - qqq] = 0;
			}
		}
		cn = 0; //和之前一样,末尾补零
	}
	
	for (i = 0; i < 3; i++) {
		printf("%d ", a[i]);
	}
	printf("%d", a[3]);
	//循环输出
	
	return 0;
}

你可能感兴趣的:(C语言,算法,c语言)