古詩詞大全網 - 成語故事 - 有n個人圍成壹圈,順序排號。凡報到3的人退出圈子,問最後留下的是原來第幾號的那位?

有n個人圍成壹圈,順序排號。凡報到3的人退出圈子,問最後留下的是原來第幾號的那位?

這是約瑟夫環的數學解法(叠代法)的公式,我們可以這樣理解

把n個人想成標號從0開始到n-1的n個人,報到3的人退出圈子,

那麽退出圈子的人在0到n-1的標號為(k+3)%n(其中k為n-1個人時退出圈子的人的標號)

因為有壹個人退出了圈子,所以還剩下n-1個人,我們對剩下的人重新從0到n-2編號,

同樣有公式(k1+3)%n(其中k1為n-2個人時退出圈子的人的標號)得出n-1個人時退出圈子人的標號,

以此類推直到n等於1時kn-1=0也就是1個人時留下的就是標號為0的人

以此有遞推公式f(1)=0,f(i)=(f(i-1)+3)%i f(i)為第i次退出圈子的人

我們用for循環從2個人時開始反推,經過n-1次叠代,去除退出圈子的人,

從而可以得到n個人時最後壹個退出的人的標號為幾,也就是最後留下的人的標號是幾,

因為我們每次標號都是從0開始所以最後退出的人的實際編號=標號+1.

有了上述分析我們就不難得出程序(見圖)