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 普通鍊錶轉不帶頭結點的迴圈鍊錶,就是將頭指標下移到第乙個節點位置 原來的頭結...