迴圈鍊錶解決約瑟夫環問題

2021-08-17 20:18:40 字數 994 閱讀 9943

題目要求的約瑟夫環操作:編號是1,2,……,n的n個人按照順時針方向圍坐一圈,每個人只有乙個密碼(正整數)。一開始任選乙個正整數作為報數上限值m,從第乙個仍開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向的下乙個人開始重新從1報數,如此下去,直到所有人全部出列為止。設計乙個程式來求出出列順序。所以這個不能使用頭節點;

//迴圈鍊錶解決約瑟夫環的問題;

//分三步:1 建立n個連線點,無頭節點的迴圈鍊錶;

// 2 確定第乙個報數人的位置;

// 3 不斷的從鍊錶中刪除鏈節點,直到鍊錶為空;

#include#includeusing namespace std;

//節點類;

class node ;

//鍊錶類;

class josephu

void creatlist(vector&nums);

void func(int m);

private:

node *head;

int n = 0;

};void josephu::creatlist(vector&nums)

head->data = nums[0];

curr->next = head;

}void josephu::func(int m)

p->next = report->next;

m = report->data;

cout << m << " ";

cout << endl;

delete(report);

report = p->next; }

}int main()

; stem.creatlist(itec);

stem.func(3);

system("pause");

return 0;

}

迴圈鍊錶解決約瑟夫環問題

問題描述 假設有n個小孩按照序號1,2,n圍坐成一圈,從第乙個小孩開始報數,每次報到n的人退出,接著從下乙個人重新開始從1開始報數,下一次再報到n的人退出,求最後乙個留下的人 小孩的個數n,和報數的n由鍵盤輸入 輸出留下人的序號 乙個迴圈鍊錶都寫得除出了很多問題,改了半天才出來 include in...

迴圈鍊錶解決約瑟夫環問題

約瑟夫環問題可以簡單的使用陣列的方式實現,但是現在我使用迴圈鍊錶的方法來實現,因為上午看到一道面試題規定使用迴圈鍊錶解決約瑟夫環問題。什麼是約瑟夫環?這道面試題考察了迴圈鍊錶的 建立 遍歷 和 刪除 建立的迴圈鍊錶的結構圖 解決約瑟夫環問題的過程 c 實現 如下 1 迴圈鍊錶解決約瑟夫環問題 2 問...

用迴圈鍊錶解決約瑟夫環問題

題目見 解法 includeusing namespace std templatestruct node class nodelist void insert node newnode else node josephusremove int interval if head p head p n...