C語言實現 約瑟夫問題(陣列和單鏈表2種方法)

2021-08-13 23:21:59 字數 1264 閱讀 6547

約瑟夫問題

乙個旅行社要從n個旅客中選出一名旅客,為他提供免費的環球旅行服務。旅行社安排這些旅客圍成乙個圓圈,

從帽子中取出一張紙條,用上面寫的正整數m(

#include #define n 100

int main()

;//陣列初始化

int i,j;

for(i = 0; i < n; i++)//陣列遍歷

i=s-1;//陣列起點

while (n > 1)

n--;

if(i == n)//終點後,開始起點

} printf("%d\n", a[i]);

return 0;

}

結果如下:

下面用迴圈鍊錶解決:

/*約瑟夫問題,單鏈表實現*/

#include #include #include //conio是console input/output(控制台輸入輸出)

typedef struct nodenode,*link;

link creatring(int n)//建立n個結點的鍊錶

tail->no=i;

tail->next=null;

} tail->next=head; //全部建立完成後將首尾相連形成環

return head; //返回建好的頭結點

}link delete(link s) //刪除迴圈鍊錶中的結點s

void josephu(link p,int n,int m,int k)//按約瑟夫規則依次輸出結點

for(i=1;inext;

printf("%d\n",p->no);//將出列人的序號輸出

p=delete(p); //從表中刪除該人

} printf("%d\n",p->no);//將最後出列的人的序號輸出

} int main(void)

執行結果:

約瑟夫問題 C語言實現

約瑟夫環 約瑟夫問題 是乙個數學的應用問題 已知n個人 以編號1,2,3 n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。通常解決這類問題時我們把編號從0 n 1,最後 1 結果...

C語言實現單鏈表之約瑟夫環

typedef int datatype typedef struct seqlist seqlist,pseqlist pseqlist josephcircle pseqlist phead,int m 當頭結點為空,m 0時本題沒有意義 迴圈何時結束 while phead pnext phe...

約瑟夫問題,「遍歷」思想 C語言實現

題目 乙個旅行社要從n個遊客中選出一名遊客,為他提供免費旅行服務,選擇方法是讓n個遊客圍成乙個圓圈,然後從信封中取出一張紙條,用上面寫著的正整數m作為報數值,第乙個人從1開始乙個人乙個人按順時針報數,報到第m個遊客時,令其出列。然後再從下乙個人開始,從1順時針報數,報到第m個遊客,再令其出列 直到圓...