C語言 約瑟夫問題

2021-09-24 06:06:22 字數 1426 閱讀 3355

維基百科說明:

約瑟夫問題(有時也稱為約瑟夫斯置換),是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環

人們站在乙個等待被處決的圈子裡。 計數從圓圈中的指定點開始,並沿指定方向圍繞圓圈進行。 在跳過指定數量的人之後,執行下乙個人。 對剩下的人重複該過程,從下乙個人開始,朝同一方向跳過相同數量的人,直到只剩下乙個人,並被釋放。

#include #include typedef struct joseph joseph;

joseph *newnode(int num)

// 初始化乙個新的迴圈鍊錶

joseph *initstruct(int length)else

} // 將最後節點的頭節點指向開始節點

current->next = headnode;

return headnode;

}void killperson(joseph *l, int row)else

}else

} printf("\n");

}int main(int argc, char const *ar**)

開始迴圈自殺: 3 -> 6 -> 9 -> 12 -> 15 -> 18 -> 21 -> 24 -> 27 -> 30 -> 33 -> 36 -> 39 -> 1 -> 5 -> 10 -> 14 -> 19 -> 23 -> 28 -> 32 -> 37 -> 41 -> 7 -> 13 -> 20 -> 26 -> 34 -> 40 -> 8 -> 17 -> 29 -> 38 -> 11 -> 25 -> 2 -> 22 -> 4 -> 35 -> 16 -> 31

開始迴圈自殺: 4 -> 8 -> 12 -> 16 -> 20 -> 24 -> 28 -> 32 -> 36 -> 40 -> 2 -> 7 -> 13 -> 18 -> 23 -> 29 -> 34 -> 39 -> 3 -> 10 -> 17 -> 25 -> 31 -> 38 -> 5 -> 14 -> 22 -> 33 -> 42 -> 11 -> 26 -> 37 -> 9 -> 27 -> 1 -> 21 -> 6 -> 35 -> 30 -> 41 -> 19 -> 15

開始迴圈自殺: 5 -> 10 -> 15 -> 20 -> 25 -> 30 -> 35 -> 40 -> 2 -> 8 -> 14 -> 21 -> 27 -> 33 -> 39 -> 3 -> 11 -> 18 -> 26 -> 34 -> 42 -> 7 -> 17 -> 28 -> 37 -> 4 -> 16 -> 29 -> 41 -> 12 -> 24 -> 43 -> 19 -> 36 -> 13 -> 38 -> 23 -> 9 -> 6 -> 22 -> 32 -> 1 -> 31

C語言 約瑟夫問題

題目中30個人圍成一圈,因而啟發我們用乙個迴圈的鏈來表示,可以使用結構陣列來構成乙個迴圈鏈。結構中有兩個成員,其一為指向下乙個人的指標,以構成環形的鏈 其二為該人是否被扔下海的標記,為1表示還在船上。從第乙個人開始對還未扔下海的人進行計數,每數到9時,將結構中的標記改為0,表示該人已被扔下海了。這樣...

約瑟夫環問題(C語言)

n個人站成一圈,每個人有不同的編號i,從編號為1的人開始順時針防線迴圈報數,數到m的人出列。然後從出列者的下乙個人重新報數,如此重複,直到全部出列。輸出n個人的出列順序。元素位置標記為0,1,2,n 1。設t為輸出元素位置,初始值0,則輸出元素位置為t t m 1 n t位置後的元素後移,列表元素個...

約瑟夫環問題 C語言

問題描述 編號是1,2,n的n個人按照順時針方向圍坐一圈,每個人只有乙個密碼 正整數 一開始任選乙個正整數作為報數上限值m,從第乙個仍開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向的下乙個人開始重新從1報數,如此下去,直到所有人全部出列為止。...