求助站外题
  • 板块学术版
  • 楼主zgy_123
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/12/19 08:41
  • 上次更新2023/10/24 07:15:12
查看原帖
求助站外题
577628
zgy_123楼主2022/12/19 08:41

题目描述

小C最近迷上了 20482048 的游戏,但是他想更新一下游戏,于是用 C++C++ 重新编写,具体的游戏规则为: 一张 4\*44\*4 的棋盘,每个方格初始为空。每个操作是在某一个方格内产生一个数字2或者4,之后产生一个动作方向,表示棋盘中所有的数字都向该方向聚拢,使得数字全部聚拢到棋盘的一边,在这个过程中,如果相邻两个数字相同,则会叠加。如果在本次操作之前,棋盘每个方格已经被填满数字了,则直接输出四行四列棋盘中的数字,否则输出所有操作完成后,棋盘的状态,没有数字的用 00 填充。

数据保证在游戏未结束时,只会在空白区域出现数字

输入格式

输入第一行包含一个整数 N,表示操作数 接下来 N 行,x, y, v, f 表示第 x 行与第 y 列出现数字为 v 后,小C 滑的方 向为 f(f 为字符,U, D, L, R 分别表示向上下左右滑)。

目前问题:

输入:

75
2 3 2 U
2 3 2 D
1 4 2 U
1 1 2 D
3 4 2 L
2 1 2 D
2 4 2 D
3 2 2 R
1 3 2 D
3 1 2 L
2 4 2 R
1 4 2 D
1 4 2 R
1 3 2 U
3 1 2 D
1 3 2 L
4 4 2 U
2 3 2 U
3 2 2 R
4 4 2 D
3 1 2 U
3 3 2 L
3 4 2 R
4 4 2 U
4 2 2 R
3 2 2 U
3 2 2 R
3 1 2 L
2 4 2 U
2 3 2 D
1 3 2 D
2 4 2 L
1 4 2 R
1 3 2 R
2 1 2 L
3 4 2 L
2 3 2 R
4 1 2 L
1 4 2 U
4 4 2 U
4 2 2 U
4 4 2 L
4 4 2 U
4 4 2 U
3 2 2 L
3 4 2 U
3 3 2 U
3 4 2 U
4 4 2 D
1 3 2 D
1 2 2 D
2 4 2 R
2 1 2 R
1 1 2 L
1 4 2 L
1 4 2 R
4 2 2 D
1 1 2 R
2 1 2 U
4 4 2 R
1 1 2 L
2 3 2 U
4 4 2 U
4 4 2 D
1 1 2 L
2 4 2 R
2 1 2 U
4 1 2 D
1 3 2 U
4 1 2 U
4 2 2 L
4 4 2 U
4 1 2 U
4 4 2 U
4 4 2 U

样例输出:

8 2 4 4 
2 64 16 2 
4 16 4 0 
2 0 0 0 

我:

8 4 16 4 
2 32 2 2 
16 8 0 0 
2 16 0 0 

代码:

#include<iostream>
#include<cstdio>
using namespace std;
int a[6][6];
bool f(){
	for(int i=1;i<=4;i++)
		for(int j=1;j<=4;j++)
			if(a[i][j]==0) return 1;
	return 0;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		if(f()==0){
			for(int i=1;i<=4;i++,cout<<endl)
				for(int j=1;j<=4;j++)
					cout<<a[i][j]<<' ';
			return 0;
		}
		int x,y,v;
		char f;
		cin>>x>>y>>v>>f;
		a[x][y]=v;
		if(f=='U')
			for(int j=1;j<=4;j++){
				if(a[1][j]+a[2][j]+a[3][j]+a[4][j]!=0)//这一列有数 
					while(a[1][j]==0)
						a[1][j]=a[2][j],a[2][j]=a[3][j],a[3][j]=a[4][j],a[4][j]=0;
				if(a[2][j]+a[3][j]+a[4][j]!=0)
					while(a[2][j]==0) a[2][j]=a[3][j],a[3][j]=a[4][j],a[4][j]=0;
				if(a[3][j]+a[4][j]!=0&&a[3][j]==0) a[3][j]=a[4][j],a[4][j]=0;
				if(a[1][j]==a[2][j]&&a[2][j]==a[3][j]&&a[3][j]==a[4][j]){//2 2 2 2
					a[1][j]*=4,a[2][j]=a[3][j]=a[4][j]=0;
					continue;
				}
				else if(a[1][j]==a[2][j]&&a[3][j]==a[4][j]){//2 2 4 4
					a[1][j]*=2,a[2][j]=a[3][j]*2,a[3][j]=a[4][j]=0;
					continue;
				}
				else if(a[1][j]==a[2][j])//2 2 8 4
					a[1][j]*=2,a[2][j]=a[3][j],a[3][j]=a[4][j],a[4][j]=0;
				else if(a[2][j]==a[3][j])//2 4 4 2
					a[2][j]*=2,a[3][j]=a[4][j],a[4][j]=0;
				else if(a[3][j]==a[4][j])//2 2 4 4
					a[3][j]*=2,a[4][j]=0;
				else continue;
				//接下来只剩3个了 
				if(a[1][j]==a[2][j])
					a[1][j]*=2,a[2][j]=a[3][j],a[3][j]=0;
				else if(a[2][j]==a[3][j])
					a[2][j]*=2,a[3][j]=0;
				else continue;
				//接下来剩2个
				if(a[1][j]==a[2][j])
					a[1][j]*=2,a[2][j]=0;
			}
		if(f=='D')
			for(int j=1;j<=4;j++){
				if(a[4][j]+a[3][j]+a[2][j]+a[1][j]!=0)
					while(a[4][j]==0)
						a[4][j]=a[3][j],a[3][j]=a[2][j],a[2][j]=a[1][j],a[1][j]=0;
				if(a[3][j]+a[2][j]+a[1][j]!=0)
					while(a[3][j]==0) a[3][j]=a[2][j],a[2][j]=a[1][j],a[1][j]=0;
				if(a[2][j]+a[1][j]!=0&&a[2][j]==0) a[2][j]=a[1][j],a[1][j]=0;
				if(a[4][j]==a[3][j]&&a[3][j]==a[2][j]&&a[2][j]==a[1][j]){
					a[4][j]*=4,a[3][j]=a[2][j]=a[1][j]=0;
					continue;
				}
				else if(a[4][j]==a[3][j]&&a[2][j]==a[1][j]){
					a[4][j]*=2,a[3][j]=a[2][j]*2,a[2][j]=a[1][j]=0;
					continue;
				}
				else if(a[4][j]==a[3][j])
					a[4][j]*=2,a[3][j]=a[2][j],a[2][j]=a[1][j],a[1][j]=0;
				else if(a[3][j]==a[2][j])
					a[3][j]*=2,a[2][j]=a[1][j],a[1][j]=0;
				else if(a[2][j]==a[1][j])
					a[2][j]*=2,a[1][j]=0;
				else continue;
				if(a[4][j]==a[3][j])
					a[4][j]*=2,a[3][j]=a[2][j],a[2][j]=0;
				else if(a[3][j]==a[2][j])
					a[3][j]*=2,a[2][j]=0;
				else continue;
				if(a[4][j]==a[3][j])
					a[4][j]*=2,a[3][j]=0;
			}
		if(f=='L')
			for(int i=1;i<=4;i++){
				if(a[i][1]+a[i][2]+a[i][3]+a[i][4]!=0)
					while(a[i][1]==0)
						a[i][1]=a[i][2],a[i][2]=a[i][3],a[i][3]=a[i][4],a[i][4]=0;
				if(a[i][2]+a[i][3]+a[i][4]!=0)
					while(a[i][2]==0) a[i][2]=a[i][3],a[i][3]=a[i][4],a[i][4]=0;
				if(a[i][3]+a[i][4]!=0&&a[i][3]==0) a[i][3]=a[i][4],a[i][4]=0;
				if(a[i][1]==a[i][2]&&a[i][2]==a[i][3]&&a[i][3]==a[i][4]){
					a[i][1]*=4,a[i][2]=a[i][3]=a[i][4]=0;
					continue;
				}
				else if(a[i][1]==a[i][2]&&a[i][3]==a[i][4]){
					a[i][1]*=2,a[i][2]=a[i][3]*2,a[i][3]=a[i][4]=0;
					continue;
				}
				else if(a[i][1]==a[i][2])
					a[i][1]*=2,a[i][2]=a[i][3],a[i][3]=a[i][4],a[i][4]=0;
				else if(a[i][2]==a[i][3])
					a[i][2]*=2,a[i][3]=a[i][4],a[i][4]=0;
				else if(a[i][3]==a[i][4])
					a[i][3]*=2,a[i][4]=0;
				else continue;
				if(a[i][1]==a[i][2])
					a[i][1]*=2,a[i][2]=a[i][3],a[i][3]=0;
				else if(a[i][2]==a[i][3])
					a[i][2]*=2,a[i][3]=0;
				else continue;
				if(a[i][1]==a[i][2])
					a[i][1]*=2,a[i][2]=0;
			}
		if(f=='R')
			for(int i=1;i<=4;i++){
				if(a[i][4]+a[i][3]+a[i][2]+a[i][1]!=0)
					while(a[i][4]==0)
						a[i][4]=a[i][3],a[i][3]=a[i][2],a[i][2]=a[i][1],a[i][1]=0;
				if(a[i][3]+a[i][2]+a[i][1]!=0)
					while(a[i][3]==0) a[i][3]=a[i][2],a[i][2]=a[i][1],a[i][1]=0;
				if(a[i][2]+a[i][1]!=0&&a[i][2]==0) a[i][2]=a[i][1],a[i][1]=0;
				if(a[i][4]==a[i][3]&&a[i][3]==a[i][2]&&a[i][2]==a[i][1]){
					a[i][4]*=4,a[i][3]=a[i][2]=a[i][1]=0;
					continue;
				}
				else if(a[i][4]==a[i][3]&&a[i][2]==a[i][1]){
					a[i][4]*=2,a[i][3]=a[i][2]*2,a[i][2]=a[i][1]=0;
					continue;
				}
				else if(a[i][4]==a[i][3])
					a[i][4]*=2,a[i][3]=a[i][2],a[i][2]=a[i][1],a[i][1]=0;
				else if(a[i][3]==a[i][2])
					a[i][3]*=2,a[i][2]=a[i][1],a[i][1]=0;
				else if(a[i][2]==a[i][1])
					a[i][2]*=2,a[i][1]=0;
				else continue;
				if(a[i][4]==a[i][3])
					a[i][4]*=2,a[i][3]=a[i][2],a[i][2]=0;
				else if(a[i][3]==a[i][2])
					a[i][3]*=2,a[i][2]=0;
				else continue;
				if(a[i][4]==a[i][3])
					a[i][4]*=2,a[i][3]=0;
			}
		for(int i=1;i<=4;i++,cout<<endl)
			for(int j=1;j<=4;j++)
				cout<<a[i][j]<<' ';
	}
	for(int i=1;i<=4;i++,cout<<endl)
		for(int j=1;j<=4;j++)
			cout<<a[i][j]<<' ';
	return 0;
}
2022/12/19 08:41
加载中...