約瑟夫環問題(C語言)

2021-10-10 16:33:36 字數 572 閱讀 2282

問題描述

n個人站成一圈,每個人有不同的編號i,從編號為1的人開始順時針防線迴圈報數,數到m的人出列。然後從出列者的下乙個人重新報數,如此重複,直到全部出列。輸出n個人的出列順序。

思路

元素位置標記為0,1,2,…n-1。

設t為輸出元素位置,初始值0,則輸出元素位置為t=(t+m-1)%n

t位置後的元素後移,列表元素個數n=n-1。

#define maxsize 100

typedef structsqlist;

void yuesefu(sqlist &l,int n,int m){

int t=0;

for(i=0;i0){

t=(t+m-1)%n;

printf("%d",l.a[t]);//列印元素

for(j=t+1;j寫在最後

約瑟夫環最為經典的問題,本題用的是順序表(陣列)的方法解決。

後面會補一下鍊錶和遍歷的解法

最基本的演算法練到爛熟也是殺手鐗(阿里演算法題中也出現過)。

約瑟夫環問題(C語言)

n個人站成一圈,每個人有不同的編號i,從編號為1的人開始順時針防線迴圈報數,數到m的人出列。然後從出列者的下乙個人重新報數,如此重複,直到全部出列。輸出n個人的出列順序。元素位置標記為0,1,2,n 1。設t為輸出元素位置,初始值0,則輸出元素位置為t t m 1 n t位置後的元素後移,列表元素個...

約瑟夫環問題 C語言

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

約瑟夫環 C語言

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