分析:先建立乙個有total個結點的鍊錶,然後頭尾相連,構成乙個環形鍊錶。從第乙個結點開始數到第m個結點,從鍊錶中刪除對應結點,表示小孩出圈。然後再從被刪除結點的下乙個結點重新開始計數,直到鍊錶中剩下最後乙個結點。
#include
<
stdlib.h
>
#include
<
stdio.h
>
#define
len sizeof(struct child)
struct
child
;void
main()
while
(total
<2||
m<2||
m>
total);
head
=create(total);n=
count(head,total,m);
printf(
"\nthe left child is %d\n
",n);
}struct
child
*create(
intnum)
p1->
next
=head;
//頭尾相連
return
head;
}int
count(
struct
child
*head,
inttotal,
intm)
printf(
"%3d",p
->
num);
old->
next=p
->
next;
free(p);p=
old->
next;
}return
p->
num;
}
Josephus問題的鍊錶實現
據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所...
josephus 約瑟夫的迴圈鍊錶實現
有n個人圍坐在乙個圓桌周圍,現從第s個人開始報數,數到第m 的人出列,然後從出列的下乙個人重新開始報數,數到第m的人 又出列,如此反覆直到所有的人全部出列為止。include include using namespace std typedef struct lnodelnode,josephus...
Josephus環問題 順序表求解
演算法描述 建立乙個具有number個元素的順序表物件list。從第start個元素開始,依次計數,每數到distance,就將該元素刪除。重複計數並刪除元素,直到剩下乙個元素。public class seqlist josephus system.out.println 被赦免者是 list.g...