資料結構 約瑟夫問題

2021-08-13 04:15:43 字數 1660 閱讀 8976

約瑟夫問題是乙個經典的問題。已知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

以文字方式顯示

9,3,2↵

以文字方式顯示

4 6 8 1 3 7 2 9 5↵

1秒64m

0測試用例 2

以文字方式顯示

10,12,3↵

以文字方式顯示

k should not bigger than n.↵

1秒64m0

//

// main.c

// 1. 約瑟夫問題

//// created by 王耀 on 15/10/2017.

//#include #include #include typedef struct nodenode; //定義結構體

int main()

//建立樹鏈,結果為begin指標指向k結點,pq指標指向n結點

q->next=head->next; //使n個結點鏈連線成環

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

while(1) //begin向後移m-1項

count--;

printf("%d",begin->num); //輸出第k項值

flag++;

if(flag%10==0||count==0)putchar('\n');

else printf(" ");

if(count==0)break;

begin=begin->next;

p->next=begin; //begin再往後移一位,以此項為初始繼續數}}

else if(x<=0) printf("n,m,k must bigger than 0.\n");

else if(k>n) printf("k should not bigger than n.\n");

}

資料結構 約瑟夫問題

約瑟夫問題 上課結束,大家聽說第一周沒有程式設計題目,立刻就被鄙視了,為了糾正這個錯誤,咱們本週就來做點簡單題目。本題要求用迴圈鍊錶實現 約瑟夫問題是乙個經典的問題。已知n個人 不妨分別以編號1,2,3,n 代表 圍坐在一張圓桌周圍,從編號為 k 的人開始,從1開始順時針報數1,2,3,順時針數到m...

資料結構 約瑟夫環問題

實驗一線性表的應用 實驗目的和要求 通過實驗進一步理解線性表的邏輯結構和儲存結構,提高使用理論知識指導解決實際問題的能力,熟練掌握鍊錶的實際應用。主要內容 題目1 josephus環問題 問題描述 約瑟夫 joseph 問題的一種描述是 編號為1,2,n的n個人按順時針方向圍坐一圈,每人持有乙個密碼...

資料結構題 約瑟夫問題

本題要求用迴圈鍊錶實現 約瑟夫問題是乙個經典的問題。已知n個人 不妨分別以編號1,2,3,n 代表 圍坐在一張圓桌周圍,從編號為 k 的人開始,從1開始順時針報數1,2,3,順時針數到m 的那個人,出列並輸出。然後從出列的下乙個人開始,從1開始繼續順時針報數,數到m的那個人,出列並輸出,依此重複下去...