本题模拟2048游戏的规则,提供4X4个格子,输入每个格子的初始值(空白格子值为0),玩家选择向下移动,所有数字向下靠拢,相同的数字相撞时会合并。移动结束后,输出合并后的数值。
输入格式:
分4行,每行输入4个整数,分别表示格子中的初值,数据之间用空格分隔。
输出格式:
分4行,输出移动合并后的数据,每个数之间有一个空格,行末无空格。
输入样例:
2 0 2 2
2 2 4 4
0 2 0 2
4 0 0 4
输出样例:
0 0 0 2
0 0 0 4
4 0 2 2
4 4 4 4
#include <stdio.h>
int main()
{
int i,j,p,o=0,n=4;
int a[4][4];
for (i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
scanf("%d",&a[i][j]);//输入数据
}
}
for (i=0;i<n;i++)//将所有数字下移到没有零存在
{
for(j=0;j<n;j++)
{
if(a[i][j]==0)
{
if(i>0)
{
for(p=i;p>0;p--)
{
a[p][j]=a[p-1][j];
}
a[0][j]=0;
}
}
}
}
for(j=0;j<n;j++)//合并所有相同数字
{
for(i=0;i<n-1;i++)
{
if(a[i][j]!=0)
{
if(a[i][j]==a[i+1][j])
{
a[i][j]=0;
a[i+1][j]=2*a[i+1][j];
i++;
}
}
}
}
for (i=0;i<n;i++)//将所有数字下移到没有零存在
{
for(j=0;j<n;j++)
{
if(a[i][j]==0)
{
if(i>0)
{
for(p=i;p>0;p--)
{
a[p][j]=a[p-1][j];
}
a[0][j]=0;
}
}
}
}
for(i=0;i<n;i++)//输出数据
{
for(j=0;j<n;j++)
{
printf("%d",a[i][j]);
o++;
if(o<4)
{
printf(" ");
}
}
printf("\n");
o=0;
}
}