約瑟夫環問題兩種情況解答

     約瑟夫環問題主要分兩種,

    第一種問題的描述是:N個人按順時針圍成一個圈,從1到N,然後報數,報到M的人就出去,然後剩餘的人仍然圍成一個圈,從出局的人下一個人開始重新報數,到M的人出局,如此循環。

   第二中問題的描述唯一的不同之處就是每個人都會持有一個密碼,這個密碼用來設置M,也就說一個人出局以後,按他所擁有的密碼作爲M來進行淘汰。

 

第一種問題有兩種解法,第一種就是使用一個循環鏈表,然後按M刪除鏈表中的節點,一直到最後一個節點爲止。第二種解法是數學方法,這個我還是不太明白,沒弄清楚它的原理,這裏有個博客的鏈接地址講這個的.http://blog.csdn.net/lmsnju/archive/2009/11/22/4852020.aspx

 

第二種問題的解法仍然是循環鏈表,只是在節點結構體當中多存了一個變量用作每個人的密碼。

 

第一種問題的第一種解法:

 

第一種問題的第二種解法,這種方法只能求出最後一個出局的人的編號,所以不能像上一種方法一樣把每個人出局的順序都輸出。下面給出這個函數:

 第二種問題的解法,實際上跟第一種差不多,只是在結構體裏面加了一個密碼值保存下一次出局的M值,代碼如下:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章