278約瑟夫環

2021-10-09 22:59:29 字數 1417 閱讀 8962

上機報告
1.本演示程式中,需要完成的輸入輸出全部為整型數,隨機數m>0,要求輸入第一行為人的個數及初始密碼,第二行表示每個人的密碼。輸出也為一串整型數。編寫此題並不需要構建新的資料型別。

2.程式執行只需要在編譯器或者cmd介面按照要求輸入即可得到輸出。

3.程式的命令包括:

1)n,m的輸入 2)表示人初始編號的陣列a的輸入 3)按照迴圈依次輸出每次出圈的密碼 4)return 0 結束

4.測試資料

(1)輸入:

7 20

3 1 7 2 4 8 4

輸出:6 1 4 7 2 3 5

為實現上述程式功能,我們用陣列表示所有人的初始編號。

1.所有人的初始編號設為a[100],題目中沒有給出最大限制人數,因此我們先開乙個大一些的陣列。

2.本程式比較簡單,只有主程式乙個模組。

int

main()

return

0;}

1.初始資料設定

int a[

100]

;//表示所有人持有的密碼

int n,m;

//n,m表示人的個數和初始密碼數

int i;

//迴圈數

int number; //當前報的號,用於和每個人的密碼相比較

int x; //記錄初始人數

2.核心迴圈語句(解析在**段中)

while

(x>0)

//迴圈語句的判斷條件:圈中還有人

if(number == m)

}}

3.完整的**展示:

#include

intmain()

while

(x>0)

if(number == m)}}

return0;

}

1.本題和部分約瑟夫環不同,需要在每次人出圈後更改下一次出圈的密碼,一開始我沒注意到這點,按照慣性思維,導致錯誤,好在及時發現,但是前面幾次沒有將m = a[i]放到正確的位置,導致只有乙個輸出程式就停止,糾正後完成程式編寫。

2.本題比較容易,沒有過多的資料結構的單獨編寫,使用陣列很快的解決了此題,如果使用鍊錶則需要額外編寫結構定義。

3.演算法的時空分析

1)兩條輸入語句時間複雜度分別為o(1),o(n),迴圈while語句中巢狀了for迴圈,時間複雜度為o(n^2)。

1.開啟程式執行,根據要求輸入,按enter得到輸出結果。

源程式檔名清單:

278約瑟夫環.cpp

約瑟夫問題 約瑟夫環

約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...

約瑟夫問題 約瑟夫環

約瑟夫問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也...

Josephu 約瑟夫 約瑟夫環 問題

version 2019年08月08日 public class josepfu 建立乙個環形的單向鍊錶 class circlesinglelinkedlist 輔助指標,幫助構建環形鍊錶 boy curboy null for int i 1 i nums i else 遍歷當前的環形鍊錶 pu...