約瑟夫環 C 實現

2021-09-28 22:21:36 字數 1200 閱讀 7167

1.題目:編號為1,2,…,n的n個人按順時針方向圍坐,每人手裡持有乙個密碼(正整數),一開始任選乙個正整數作為報數上限值m,從第乙個人開始按順時針方向從1開始順序報數,報到m時停止,報m的人出列,將他的密碼作為新的m值,從他在順時針方向的下乙個人開始重新從1報數,如此下去,直至所有人全部出列為止.

2.方式:雙向迴圈鍊錶

3.完整**:

#include#include#includeusing namespace std;

//節點

struct node

;//輔助節點

struct funode

;//建立雙向列表

class doublelinklist

~doublelinklist()

;void createlink();//建立雙向迴圈鍊錶

void deletelink();//刪除節點

vectornode;

private:

int count;

int number;

node *head;

funode again(node*);//傳入新的開始節點,並返回當前的節點

};//建立雙向迴圈鍊錶

void doublelinklist::createlink()

next->next = head;

head->prior = next;

this->head = head;

}funode doublelinklist::again(node *head)

no.curr = head->next;

no.loc_result = head->location;

no.num_result = head->number;

head->prior->next = head->next;

head->next->prior = head->prior;

cout<

delete head;

}return no;

}void doublelinklist::deletelink()

}int main()

return 0;

}

4.效果:

約瑟夫環 C 實現

include using namespace std void main int rem n 桌上剩餘人數 int pos 0 當前開始計數人的位置 int count 0 當前計數大小 一直迴圈到桌上只剩乙個人 while rem 1 if a pos true pos 輸出桌上剩餘的最後乙個人...

約瑟夫環實現

約瑟夫環問題,這是乙個很經典演算法,處理的關鍵是 偽鍊錶 問題描述 n個人圍成一圈,從第乙個人開始報數,報到m的人出圈,剩下的人繼續從1開始報數,報到m的人出圈 如此往復,直到所有人出圈。模擬此過程,輸出出圈的人的序號 1 2 3 4 5 6 7 8 3,6 出圈 剩下7 8 1 2 4 5 7 8...

C語言 實現約瑟夫環

鏈式解法 include include typedef struct sqlist sqlist 建立解約瑟夫環需要的鍊錶,該鍊錶不帶頭節點 sqlist creatlist int length p next null 普通鍊錶轉不帶頭結點的迴圈鍊錶,就是將頭指標下移到第乙個節點位置 原來的頭結...