Python 3座塔场景下磁盘反向移动n次后的位置计算通用公式求解
3塔反向移动位置通用计算公式
前提说明
现有3座塔对应编号规则:A=1、B=2、C=3,正向移动定义为按1→2→3→1的顺序每次移动1步,反向移动为按1→3→2→1的顺序每次移动1步。
已知正向移动n步的计算公式为(start_pos + n) % 3,需注意若模3结果为0,对应塔编号为3。
通用反向移动公式
1. 基础公式
直接对应反向移动的逻辑,公式如下:(start_pos - n) % 3
结果说明:若计算结果为0,最终位置为3;其余结果直接对应塔编号。
示例验证:起始位置B(编号2)反向移动7次,代入得(2-7) %3 = (-5)%3 =1,对应A,和题示示例结果一致。
2. 全编程语言兼容版(无需额外判断0值)
针对部分编程语言模负数会返回负结果的问题,可使用调整后的公式,计算结果直接返回1~3的有效塔编号:(start_pos - 1 - n % 3 + 3) % 3 + 1
验证示例1:起始位置1(A)反向移动1次:
(1-1 -1%3 +3)%3 +1 = (0-1+3)%3 +1 = 2%3 +1 = 3,对应C,符合预期。
验证示例2:起始位置3(C)反向移动2次:(3-1 -2%3 +3)%3 +1 = (2-2+3)%3 +1 = 3%3 +1 = 1,对应A,符合预期。
等价推导思路
反向移动n次等价于正向移动3 - n%3次,也可基于正向公式改写得到反向计算逻辑,结果和上述公式一致。
内容的提问来源于stack exchange,提问作者TYL
相关产品推荐
相关产品推荐

