推理过程
这里假设我们希望永远都是0位置先报数,这个假定逻辑很重要。
按照这个假定逻辑,我们会对整个环形链表逆时针旋转m个位置,也就是3个单位,位置3移动到了0位置。
这样就把10人游戏的第二轮,转换成了9人游戏的第一轮。
推理:假如知道了9人游戏中谁会留在最后,是不是就可以推导出10人游戏谁可以留到最后
这时会有一个想法:
旧位置3 是否是 新位置0 加3 得到的?
但是,因为是环状结构,旧位置 的1 通过新位置8 加3 的方式是不能直接得出来的
观察一下加3的处理结果:
新位置8 加3 的方式8 + 3 == 11,旧位置是1,
新位置7 加3 的方式7 + 3 == 10,旧位置是0,
基于以上思考过程,得出推理公式:((新位置)+ 3)% 10 == 旧位置
通用公式((新位置)+ m)% n == 旧位置
递推公式
如果f(n,m)是 当总数为n,报数为m的最后存活位置
如果f(n-1,m)是 当总数为n-1,报数为m的最后存活位置
参考:https://v.qq.com/x/page/e0965vbfeg4.html