面試系列2--約瑟夫環(huán)問題(Josephus)

字號:

原題:
     用戶輸入M,N值,從1至N開始順序循環(huán)數(shù)數(shù),每數(shù)到M輸出該數(shù)值,直至全部輸出。寫出C程序。(約瑟夫環(huán)問題 Josephus)
    提示:
     由于當(dāng)某個人退出圓圈后,報數(shù)的工作要從下一個人開始繼續(xù),剩下的人仍然是圍成一個圓圈的,可以使用循環(huán)表,由于退出圓圈的工作對應(yīng)著表中結(jié)點的刪除操作,對于這種刪除操作頻繁的情況,選用效率較高的鏈表結(jié)構(gòu),為了程序指針每一次都指向一個具體的代表一個人的結(jié)點而不需要判斷,鏈表不帶頭結(jié)點。所以,對于所有人圍成的圓圈所對應(yīng)的數(shù)據(jù)結(jié)構(gòu)采用一個不帶頭結(jié)點的循環(huán)鏈表來描述。設(shè)頭指針為p,并根據(jù)具體情況移動。
     為了記錄退出的人的先后順序,采用一個順序表進(jìn)行存儲。程序結(jié)束后再輸出依次退出的人的編號順序。由于只記錄各個結(jié)點的number值就可以,所以定義一個整型一維數(shù)組。如:int quit[n];n為一個根據(jù)實際問題定義的一個足夠大的整數(shù)。
    代碼:
    /********************************************************************
     created: 2006/06/14
     filename: C:\Documents and Settings\Administrator\桌面\tmpp\josephus.c
     file path: C:\Documents and Settings\Administrator\桌面\tmpp
     file base: josephus
     file ext: c
     author: A.TNG
     version: 0.0.1
     purpose: 實現(xiàn) Josephus 環(huán)問題
     用戶輸入M,N值,從1至N開始順序循環(huán)數(shù)數(shù),每數(shù)到M輸出該數(shù)值,
     直至全部輸出。寫出C程序。(約瑟夫環(huán)問題 Josephus)