我为河内塔游戏设置了一套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
玩游戏? (这将是一个更容易的游戏,但这是有意的。)
答案 0 :(得分:0)
您可以使用{Sum_of_peg_indices} - {Sum_of_pegs_selected}。所以对于3你有(0 + 1 + 2)= 3 = {Sum_of_peg_indices},所以你得到你提到的公式。