復健 c語言陣列 約瑟夫問題

2021-09-12 22:21:32 字數 814 閱讀 4761

一年沒動過**,現在腦子也不好使了,用了一種愚蠢至極的方式解決了約瑟夫環問題。寫在這裡就算是記錄儲存一下自己的亂塗亂畫。

問題:已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號為s的人開始報數,數到m的那個人出列;他的下乙個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人只剩下乙個。

#include

#include

intmain()

;//定義陣列,全部初始化為0

int s,n,m;

scanf

("%d %d %d"

,&s,

&n,&m)

;for

(int i=

1;i<=n;i++

) p[i]=2

;int flag=s;

//flag為第幾號人的標記,初始化為第s號人

int lim=n;

//迴圈結束條件相關

int count=m;

//count為計數器,用以標記數到的第幾個人

while

(lim>1)

//當圈裡只剩下乙個人時迴圈結束

if(flag==n) flag=1;

else flag++;}

int id;

for(

int i=

1;i<=n;i++)if

(p[i]==2

) id=i;

printf

("\n勝利者:%d"

,id)

;return0;

}

C語言 約瑟夫問題

維基百科說明 約瑟夫問題 有時也稱為約瑟夫斯置換 是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。人們站在乙個等待被處決的圈子裡。計數從圓圈中的指定點開始,並沿指定方向圍繞圓圈進行。在跳過指定數量的人之後,執行下乙個人。對剩下的人重複該過程,從下乙個人開始,朝...

C語言 約瑟夫問題

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

約瑟夫環問題(C語言)

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