约瑟夫递推公式
问题描述:n个人(编号1~n),从1开始报数,报到m的退出,剩下的人继续从1开始报数。求胜利者的编号。
分析:
当m<n时,第一次编号为m的出队,重新报数的顺序为:
m+1, m+2, m+3,…… n, 1, 2,……m-1,给他们重新编号为:
1, 2, 3…… n-m, n-m+1, n-m+2,……n-1。
反过来想,对于有x-1人的环推到有x个人的环,其编号对应关系为:y --> (y+m)mod x
当m>n时类似。。
令f[i]表示i个人玩游戏报m退出最后胜利者的编号,最后的结果自然是f[n]
递推公式
f[1]=1;
f[i]=(f[i-1]+m-1)mod i+1; (i>1)
鸣谢: http://hi.baidu.com/iiywj/blog/item/abef42caee4ee6f452664fb2.html