上機報告
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...