約瑟夫問題

2021-07-27 16:49:03 字數 1296 閱讀 1725

約瑟夫問題

//n個人圍圈報數,報m出列,最後剩下的是幾號?

#include

#include

typedef struct node

intdata;

structnode *next;

}node;

node *create(int n)

node*p = null, *head;

head= (node*)malloc(sizeof (node ));

p= head;

node*s;

inti = 1;

if(0 != n )

while(i <= n )

s= (node *)malloc(sizeof (node));

s->data= i++;    // 為迴圈鍊錶初始化,第乙個結點為1,第二個結點為2。

p->next= s;

p= s; //這裡是先得到一塊記憶體,在下一次分配記憶體之後再填指標域的值。

s->next= head->next;

free(head);

returns->next ;

int main()

intn = 41;

intm = 3;

inti;

node*p = create(n);

node*temp;

m%= n;   // m在這裡是等於2

while(p != p->next )

//控制條件,當這個節點的指標域指向自身時,說明只剩乙個節點

for(i = 1; i < m-1; i++)

p = p->next

[r1];

//此處,p是第二個節點的首位址

printf("%d->",p->next->data );

//此處,p->next是第三個節點的首位址

temp= p->next ;                      

//此處,temp是第三個節點的首位址[r2]

p->next= temp->next ;

//此處,temp->next是第四個節點的首位址

free(temp);

p = p->next ;

printf("%d\n",p->data );

return0;

[r1]1 p向後移動一位

2 p再向後移動一位

[r2]

p->next

把第四個節點的首位址賦值給p->next就是把第四個節點的首位址儲存在第二個節點的指標域中。

約瑟夫問題 約瑟夫環

約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...

約瑟夫問題 約瑟夫環

約瑟夫問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也...

約瑟夫問題

這是17世紀的法國數學家加斯帕在 數目的遊戲問題 中講的乙個故事 15個教徒和15 個非教徒在深海上遇險,必須將一半的人投入海中,其餘的人才能倖免於難,於是想了乙個辦法 30個人圍成一圓圈,從第乙個人開始依次報數,每數到第九個人就將他扔入大海,如此迴圈進行直到僅餘15個人為止。問怎樣排法,才能使每次...