約瑟夫環問題

2021-10-04 13:21:32 字數 2963 閱讀 9745

n個人在一起做遊戲,他們制定了一下規則:

1、首先,所有參加遊戲的人按順序編號為1、2、3…n; 2、接下來每個人心裡產生乙個數字,這個數字稱為序號為 n的人的密碼p; 3、所有參加遊戲的人按照編號站成乙個圈,為遊戲設定初始密碼k,從編

號為 1的人這裡開始報數,報到 k的人退出隊伍,然後將自己心中的密碼 k2說出

來,由下乙個人繼續從 1開始報數,報到 k2的人退出隊伍,以此類推;

4、當只剩下乙個人時,遊戲結束。

在使用者輸入了人數n、每個人的密碼p和初始

密碼k的情況下,自動完成上面的遊戲過程,輸出先後離開隊伍的人的序號序列,最後輸出剩下的人的編號

問題描述

輸入:

人數n(規定最大人數為100)

每個人的密碼key

初始密碼k

輸出:

先後離去的人的編號numno

最後剩下的人的編號numno

處理過程:

提示並儲存使用者輸入的人的總數n

提示並儲存使用者輸入的初始密碼k

提示並儲存使用者輸入的每乙個人的密碼key

遍歷使用者儲存的人的密碼的同時計數器自增

滿足條件時進行相關操作,輸出離開的人的編號

迴圈退出後輸出最後剩下的人的編號

退出程式

流程設計

模組介紹

儲存:

採用int型別的值儲存人數n,初始密碼k

採用結構體陣列儲存每個人的編號personno、密碼

personkey和未離開的人數personnum

實現:

迴圈遍歷陣列的每個元素,符合條件的元素輸出,直

至陣列中只有乙個有效元素,再輸出這個元素

源**

#include

#define num_max 100

using

namespace std;

//用結構體陣列存放參與遊戲的人的資訊

struct personperson;

intmain()

//根據使用者輸入的資訊初始化結構體陣列

for(

;i < n;i ++)

person.personnum = n;

//接受使用者輸入的初始密碼

cout <<

"please input the primitive key:"

<< endl;

cin >> k;

int counts =1;

i =0;

//剩下一人時退出迴圈

while

(person.personnum !=1)

//報的號碼與密碼不一樣並且此人還未退出遊戲時,繼續報數

else

if(person.personno[i]!=0

)//控制報數迴圈進行

i =(i +1)

% n;

} i =0;

//依據標誌判斷此人是否是最後剩下的人

for(

;i < n;i ++)}

return0;

}

測試樣例

1.personnum最小值:

3.用例1:

用例2:

用例3:

源**

#include #include using namespace std;

//指標節點結構體陣列

typedef struct linknodenode,*link;

//建立雙向的課迴圈的鍊錶

link createlink(int n)

//雙迴圈鍊錶

h->next->pre = r;

//迴圈結束後,返回這個鍊錶的頭指標h即可

return h;

}int main()

cout << "the no of person's left: " << p->personno << endl;

k = p ->personkey;

node* s = p;

s ->pre ->next = s->next;

s ->next ->pre = s->pre;

//最後釋放被刪除節點的空間就行

free(s);

counts = 1;

n --;

}else

counts ++;

p = p ->next;

}cout << "the last one:" << t ->personno << endl;

return 0;

}

我的部落格

約瑟夫問題 約瑟夫環

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

約瑟夫問題 約瑟夫環

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

約瑟夫環問題

約瑟夫環問題 問題描述 編號是1,2,n的n個人按照順時針方向圍坐一圈,每個人持有乙個密碼 正整數 一開始任選乙個正整數作為報數上限值m,從第乙個人開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向的下乙個人開始重新從1報數,如此下去,直到所有人...