问题描述:n个人(编号0~(n-1)),从0开始报数,报到m-1的退出,剩下的人继续从0开始报数。求胜利者的编号
============================================================================================================
归纳演绎法
当第一个人退出后,问题便演变为n-1人的相同问题。如果知道n-1人规模的结果,是否可以直接求出n人规模的结果呢?
如果可以,那么就可以把问题变为一个O(n)的求解过程。
原始编号: 0,1,2,...m-1,m,m+1,....n-1
m-1退出: 0,1,2,....m-2,m,m+1,...n-1
从m开始: m,m+1,...n-1,0,1,2,...m-2 x n个数编号
重新编号: 0,1,2,.....n-1-m,n-m,....n-2 x' n-1个数编号
映射关系: x = (x' + m) % n
递推公式:
f[1]=0;
f[i]=(f[i-1]+m)%i; (i>1)