链表之单链表约瑟夫问题(三)
生活随笔
收集整理的這篇文章主要介紹了
链表之单链表约瑟夫问题(三)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
約瑟夫環(約瑟夫問題)是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重復下去,直到圓桌周圍的人全部出列。通常解決這類問題時我們把編號從0~n-1,最后[1] 結果+1即為原問題的解。
約瑟夫環:遞歸算法
假設下標從0開始,0,1,2 .. m-1共m個人,從1開始報數,報到k則此人從環出退出,問最后剩下的一個人的編號是多少?
現在假設m=10
0 1 2 3 4 5 6 7 8 9 k=3
第一個人出列后的序列為:
0 1 3 4 5 6 7 8 9
即:
3 4 5 6 7 8 9 0 1(*)
我們把該式轉化為:
0 1 2 3 4 5 6 7 8 (**)
則你會發現: ((**)+3)%10則轉化為(*)式了
也就是說,我們求出9個人中第9次出環的編號,最后進行上面的轉換就能得到10個人第10次出環的編號了
設f(m,k,i)為m個人的環,報數為k,第i個人出環的編號,則f(10,3,10)是我們要的結果
當i=1時, f(m,k,i) = (m+k-1)%m
當i!=1時, f(m,k,i)=
總結
以上是生活随笔為你收集整理的链表之单链表约瑟夫问题(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android之应用程序如何调用支付宝接
- 下一篇: 链表之判断一个链表是否为回文结构(一)