約瑟夫問題

2021-06-18 11:26:40 字數 943 閱讀 7998

輸入乙個有隨機數組成的數列(陣列元素非零且長度已知),和初始計數值m,從數列首位置開始計數,計數到m後,將數列該位置數值替換計數值m,並將數列該位置數值出列,然後從下一位置從新開始計數,直到數列所有數值出列為止,如果計數到達數列尾段,則返回數列首位置繼續計數,請程式設計實現上述計數過程,同時輸出數值出列的順序,比如:輸入的隨機數為3,1,2,4,初始計數值m=7,從數列首位置開始計數(數值3所在位置),第一輪計數出列數字為2,計數值更新m=2,出列後數列為3,1,4,從數值4所在位置從新開始計數;第二輪計數出列數字為3,計數值更新m=3,出列後數列為1,4,從數值1所在位置從新開始計數;第三輪計數出列數字為1,計數值更新m=1,出列後數列為4,從數值4所在位置從新開始計數;最後一輪計數出列數字為4,計數過程完成。輸出數值出列順序為:2,3,1,4.

#include using namespace std;

void josephus(int* input,int len,int m,int* output)

m=input[i]; //更新m值

output[cnt++]=input[i];//陣列元素出列

input[i]=0;//將出列的元素賦值為0,作為標記

if(cnt == len)//如果出列元素個數和陣列長度相等,即全部出列,則跳出迴圈

break;

} }int main()

;

int len=sizeof(input)/sizeof(input[0]);

int output[len];

int m=7;

josephus(input,len,m,output);

for(int i=0;icout<<*(output+i)<<'\t';

cout

return 0;

}

約瑟夫問題 約瑟夫環

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

約瑟夫問題 約瑟夫環

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

約瑟夫問題

這是17世紀的法國數學家加斯帕在 數目的遊戲問題 中講的乙個故事 15個教徒和15 個非教徒在深海上遇險,必須將一半的人投入海中,其餘的人才能倖免於難,於是想了乙個辦法 30個人圍成一圓圈,從第乙個人開始依次報數,每數到第九個人就將他扔入大海,如此迴圈進行直到僅餘15個人為止。問怎樣排法,才能使每次...