问题描述
- 2048用C语言编写问题!
-
为2048的游戏写一个算法,输入一个元素只能为0,2或4的二维数组和一个操作,字符wsad代替上下左右,时间复杂度越小起好。(不用随机产生2和4)如,
输入:
0 0 2 2
2 0 0 0
0 0 0 0
4 4 2 2
a
输出:
4 0 0 0
2 0 0 0
0 0 0 0
8 4 0 0
下面这段代码如何更改才能实现?
#include
void main()
{char turn ; int s[4][4]; int a[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}; int i,j; int q=0; int e=0; for(i=0;i<4;i++) { for(j=0;j<4;j++) { scanf("%d",s[i][j]); } } scanf("%c",&turn); switch(turn) { case 'w': { for(i=0;i<4;i++) { for(j=0;j<4;j++) { if(s[i][j]==s[i][j+1]) { a[q][e]=s[i][j]+s[i][j+1]; e++; j++; } else { a[i][j]=s[i][j]; } } } break; } case 's': { for(i=0;i<4;i++) { for(j=0;j<4;j++) { if(s[i][j]==s[i][j+1]) { e=3; a[q][e]=s[i][j]+s[i][j+1]; e--; j++; } else { a[i][j]=s[i][j]; } } } break; } case 'a': { for(j=0;j<4;i++) { for(i=0;i<4;j++) { if(s[i][j]==s[i+1][j]) { a[q][e]=s[i][j]+s[i+1][j]; q++; i++; } else { a[i][j]=s[i][j]; } } } break; } case 'd': { for(j=0;j<4;j++) { for(i=0;i<4;i++) { if(s[i][j]==s[i+1][j]) { q=3; a[q][e]=s[i][j]+s[i+1][j]; q--; i++; } else { a[i][j]=s[i][j]; } break; } }
break;
}
default:
printf("输入无效");
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{scanf("%d",a[i][j]); }
}
}
解决方案
首先,你的输入数组语句都少了'&',在第14行和倒数第四行,还有就是你这个2048有很大的问题啊,操作都没有循环的,而且没有判断输掉的条件,没有判断可以移动的条件,为什么一开始要输入数组的?结束时也是要输入,是为什么要这么设计呢?我到时有个好的方案,要是不介意时间关系的话,我这个星期天把代码给你看。只要你留个邮箱给我?因为最近事情有点多,只有周末有点空写了。可以的话就回复我咯。
解决方案二:
表示强烈关注,持续围观中
解决方案三:
首先scanf输入应为scanf("%d ",&s[i][j]);
其次最后的scanf应改为printf函数,
再者输出时应每四个数应换行故:
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%d",a[i][j]);
}
putchar('n');
}
}
我测试了一下可以通过。
解决方案四:
参考代码
https://github.com/707wk/Senior-middle-school/tree/master/2048
时间: 2024-11-03 00:57:06