原題:
用戶輸入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)
用戶輸入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)

