使用鍊錶實現Josephus環問題

2022-08-18 10:18:14 字數 971 閱讀 3691

分析:先建立乙個有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...