題目:n個數字(0,1,…,n-1)形成乙個圓圈,從數字0開始,每次從這個圓圈中刪除第m個數字(第乙個為當前數字本身,第二個為當前數字的下乙個數字)。當乙個數字刪除後,從被刪除數字的下乙個繼續刪除第m個數字。求出在這個圓圈中剩下的最後乙個數字。
思路:建立乙個迴圈鍊錶,每次走m步刪除乙個節點,最後剩下乙個
原始碼:
[html]view plain
copy
#include
<
iostream.h
>
#include "malloc.h"
struct node
; node *createlist(int a,int n) q
=head
; while(q->
next!=null) q=
q->
next;
q->
next
=head
; return head;
} void display(node *head)
} void deletenode(node *head,int m)
p->
next=q
->
next;//刪除節點
cout<
<
"delete node is:"
<
<
q->
data
<
<
endl
;
} cout<
<
"last node is:"
<
<
p->
data
<
<
endl
;
} int main()
; node *head;
head
=createlist
(a,9);
display(head);
//cout<
<
head-
>
data;
deletenode(head,2);
return 0;
}
約瑟夫迴圈 改
此題根據約瑟夫問題改編。首先定義乙個 內部類node,基於node來實現各種操作。node 有兩個資料域來記錄密碼與位置,乙個指標域來指向下一條。這樣就形成了乙個單向鏈。當尾的下一條為頭時,就形成了單向環。然後定義成員函式head 和 rear 用於指向鏈環的頭和尾,以及記錄元素個數的size。然後...
迴圈鍊錶解決約瑟夫迴圈問題
最近開始複習資料結構,今天手寫了乙個約瑟夫迴圈問題。首尾相連的鍊錶 head last tail tail next head 建立迴圈鍊錶和建立普通鍊錶方法差不多,只需要首尾相連即可 已知 n 個人 以編號1,2,3,n分別表示 圍坐在一張圓桌周圍,從編號為 k 的人開始順時針報數,數到 m 的那...
迴圈鍊錶(約瑟夫環)
約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。要通過輸入n,m,k三個正整數,來求出列的序列。這個問題採用的是典型的...