約瑟夫問題

2021-10-11 02:02:18 字數 1419 閱讀 1684

約瑟夫問題 (本題要求用迴圈鍊錶實現)

約瑟夫問題是乙個經典的問題。已知n個人(不妨分別以編號1,2,3,…,n 代表 )圍坐在一張圓桌周圍,從編號為 k 的人開始,從1開始順時針報數1, 2, 3, …,順時針數到m 的那個人,出列並輸出。然後從出列的下乙個人開始,從1開始繼續順時針報數,數到m的那個人,出列並輸出,…依此重複下去,直到圓桌周圍的人全部出列。

輸入:n, k, m

輸出:按照出列的順序依次輸出出列人的編號,編號中間相隔乙個空格,每10個編號為一行。

非法輸入的對應輸出如下

a)輸入::n、k、m任乙個小於1

輸出:n,m,k must bigger than 0.

b)輸入:k>n

輸出:k should not bigger than n.

例:輸入:9,3,2

輸出:4 6 8 1 3 7 2 9 5

測試輸入

期待的輸出

時間限制

記憶體限制

額外程序

測試用例1

1. 9,3,2↵

1.4 6 8 1 3 7 2 9 5↵

1秒64m

0測試用例2

1.10,12,3↵

1.k should not bigger than n.↵

1秒64m

0

#include

#include

intmain()

if(k>n)

struct node

;//定義結點

typedef

struct node node;

//定義node

node *head;

//說明頭指標head

node *p;

//說明乙個指向結點的指標變數p

head=

(node*

)malloc

(sizeof

(node)

);

head->num=-1

; head->next=head;

for(i=n;i>

0;i--

)while

(p->next!=head)

p=p->next;

p->next=head->next;

p=p->next;

i=1;

while

(iwhile

(p->next!=p)

s=p;

p=p->next;

q->next=p;

if(num<9)

else

}printf

("%d\n"

,p->num)

;return0;

}

約瑟夫問題 約瑟夫環

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

約瑟夫問題 約瑟夫環

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

約瑟夫問題

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