2048 | ||
[ Submit Code ] [ Top 20 Runs ] [ Runs Status ] | ||
Acceteped : 1460 | Submit : 3647 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB | |
Description | ||
2048题目描述2048是大家非常喜欢的一款小游戏,给定一个2048的局面,和下一步的指令,请计算出变化后的局面。 2048的游戏规则如下:
输入第一行是一个整数K,表示样例的个数。 每个样例的前4行,每行4个整数,如果整数为0表示空白格子,其他为数字。 每个样例的第5行,是指令,指令为"LEFT","DOWN","RIGHT","UP",依次表示滑动的方向。 输出输出每个样例的结果,每个样例后输出一个空行。 样例输入3 2 2 0 0 2 0 2 0 2 0 0 2 0 0 2 2 LEFT 2 0 2 0 2 2 2 2 0 2 0 2 4 2 2 0 LEFT 2 4 2 2 0 2 2 0 0 4 4 4 0 0 0 2 LEFT 样例输出4 0 0 0 4 0 0 0 4 0 0 0 4 0 0 0 4 0 0 0 4 4 0 0 4 0 0 0 4 4 0 0 2 4 4 0 4 0 0 0 8 4 0 0 2 0 0 0 |
#include<stdio.h>
int an[5][5];
void left()
{
int i,j,k;
int cnt;
for(i=0;i<4;i++){
for(j=0;j<3;j++){
for(k=0;k<3-j;k++){
if(an[i][k]==0){
an[i][k]=an[i][k+1];
an[i][k+1]=0;
}
}
}
}
for(i=0;i<4;i++){
for(j=0;j<3;j++){
if(an[i][j]==an[i][j+1]){
an[i][j+1]*=2;
an[i][j]=0;
j+=1;
}
}
}
for(i=0;i<4;i++){
for(j=0;j<3;j++){
for(k=0;k<3-j;k++){
if(an[i][k]==0){
an[i][k]=an[i][k+1];
an[i][k+1]=0;
}
}
}
}
}
void right()
{
int i,j,k;
int cnt;
for(i=0;i<4;i++){
for(j=0;j<3;j++){
for(k=3;k>j;k--){
if(an[i][k]==0){
an[i][k]=an[i][k-1];
an[i][k-1]=0;
}
}
}
}
for(i=0;i<4;i++){
for(j=3;j>0;j--){
if(an[i][j]==an[i][j-1]){
an[i][j-1]*=2;
an[i][j]=0;
j-=1;
}
}
}
for(i=0;i<4;i++){
for(j=0;j<3;j++){
for(k=3;k>j;k--){
if(an[i][k]==0){
an[i][k]=an[i][k-1];
an[i][k-1]=0;
}
}
}
}
}
void up()
{
int i,j,k;
int cnt;
for(j=0;j<4;j++){
for(i=0;i<3;i++){
for(k=0;k<3-i;k++){
if(an[k][j]==0){
an[k][j]=an[k+1][j];
an[k+1][j]=0;
}
}
}
}
for(j=0;j<4;j++){
for(i=0;i<3;i++){
if(an[i][j]==an[i+1][j]){
an[i+1][j]*=2;
an[i][j]=0;
i+=1;
}
}
}
for(j=0;j<4;j++){
for(i=0;i<3;i++){
for(k=0;k<3-i;k++){
if(an[k][j]==0){
an[k][j]=an[k+1][j];
an[k+1][j]=0;
}
}
}
}
}
void down()
{
int i,j,k;
int cnt;
for(j=0;j<4;j++){
for(i=0;i<3;i++){
for(k=3;k>i;k--){
if(an[k][j]==0){
an[k][j]=an[k-1][j];
an[k-1][j]=0;
}
}
}
}
for(j=0;j<4;j++){
for(i=3;i>0;i--){
if(an[i][j]==an[i-1][j]){
an[i-1][j]*=2;
an[i][j]=0;
i-=1;
}
}
}
for(j=0;j<4;j++){
for(i=0;i<3;i++){
for(k=3;k>i;k--){
if(an[k][j]==0){
an[k][j]=an[k-1][j];
an[k-1][j]=0;
}
}
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
int i,j;
char ch[6];
for(i=0;i<4;i++){
for(j=0;j<4;j++){
scanf("%d",&an[i][j]);
}
}
scanf("%s",ch);
int d=0;
if(ch[0]=='L'){
left();
}
else if(ch[0]=='R'){
right();
}
else if(ch[0]=='U'){
up();
}
else if(ch[0]=='D'){
down();
}
int cnt=0;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
printf("%d",an[i][j]);
cnt++;
if(cnt%4!=0)printf(" ");
else printf("\n");
}
}
printf("\n");
}
return 0;
}