我有一套 3 个用于 Hanoi Towers 游戏的钉子:
int[][] pegs = new int[N_PEGS][N_DISCS];
所以 peg 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
?(那样会是一个更容易的游戏,但这是故意的)。