河内塔与nPegs> 3(儿童游戏更简单)

时间:2012-08-20 07:24:02

标签: algorithm math

我为河内塔游戏设置了一套3个钉子:

int[][] pegs = new int[N_PEGS][N_DISCS];

因此第1个引脚是pegs[0],peg2是pegs[1],peg3是pegs[2]

鉴于两个挂钩职位的id,我需要得到另一个的id,因此:

if (startFromPeg == 0 && endAtPeg == 1) {
    useAsTempPeg = 2;
}

换句话说,在集合S = {0,1,2}中,我想在考虑参数{s1,s2}之后留下元素。

对于一组3个钉子,我可以用简单的数学方法做到这一点,除非我弄错了:

useAsTempPeg = N_PEGS - startFromPeg - endAtPeg;

这似乎总是给出正确的结果:

3 - 0 - 1 = 2 (ok)
3 - 0 - 2 = 1 (ok)
3 - 1 - 2 = 0 (ok)

如何使这个公式变得通用并使用N_PEGS > 3玩游戏? (这将是一个更容易的游戏,但这是有意的。)

1 个答案:

答案 0 :(得分:0)

您可以使用{Sum_of_peg_indices} - {Sum_of_pegs_selected}。所以对于3你有(0 + 1 + 2)= 3 = {Sum_of_peg_indices},所以你得到你提到的公式。