更具体地说,我如何移动数组的内容:
[2 0 2 8]
这样的事情:
[0 0 4 8]
编辑: 通过转移,我的意思是像Super 2048的游戏。将此阵列视为4x4游戏中的一行。当我输入命令“向右移动”时,左边的数字会查找等于它的数字,就像元素0等于元素2.元素0中的数字然后变为0,元素中的数字变为0然后,2将加起来为4.如果数字找不到相同的数字,它将停在不同数字的左侧。
我尝试直接操作数组的元素,就像下面的代码一样,但我没有成功。
for(int col = dimension-2; col >= 0; col--)
{
for(int tgtCol = col+1; tgtCol < dimension; tgtCol++)
{
if(initialState[tgtCol] == initialState[col])
{
initialState[tgtCol] += initialState[col];
initialState[col] = 0;
}
/*if(initialState[tgtCol] == 0 && InitialState[col] != 0)
{
initialState[tgtCol] = initialState[col];
initialState[col] = 0;
}
Code for later implementation
*/
else
{}
}
}
答案 0 :(得分:0)
这适合你,
int[] targetState = new int[dimension];
int tCol = dimension - 1;
for (int i = dimension - 1; i >= 0; i--) {
if (initialState[i] == 0) {
continue;
} else {
if ((targetState[tCol] == initialState[i])) {
targetState[tCol] += initialState[i];
tCol--;
} else if (targetState[tCol] == 0){
targetState[tCol] = initialState[i];
} else {
targetState[--tCol] = initialState[i];
}
}
}
initialState = targetState;
我认为现场转移在计算上非常昂贵。