日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

约瑟夫问题的循环链表实现

發布時間:2025/7/14 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 约瑟夫问题的循环链表实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
據說著名猶太歷史學家 Josephus有過以下的故事:在羅馬人占領喬塔帕特后,39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧愿死也不要被敵人抓到,于是決定了一個自殺方式,41個人排成一個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然后再由下一個重新報數,直到所有人都自殺身亡為止。然而Josephus 和他的朋友并不想遵從。首先從一個人開始,越過k-2個人(因為第一個人已經被越過),并殺掉第k個人。接著,再越過k-1個人,并殺掉第k個人。這個過程沿著圓圈一直進行,直到最終只剩下一個人留下,這個人就可以繼續活著。問題是,給定了和,一開始要站在什么地方才能避免被處決?Josephus要他的朋友先假裝遵從,他將朋友與自己安排在第16個與第31個位置,于是逃過了這場死亡游戲。? 17世紀的法國數學家加斯帕在《數目的游戲問題》中講了這樣一個故事:15個教徒和15 個非教徒在深海上遇險,必須將一半的人投入海中,其余的人才能幸免于難,于是想了一個辦法:30個人圍成一圓圈,從第一個人開始依次報數,每數到第九個人就將他扔入大海,如此循環進行直到僅余15個人為止。問怎樣排法,才能使每次投入大海的都是非教徒。 一般形式:N個人圍成一圈,從第k個開始報數,第M個將被殺掉,最后剩下一個,其余人都將被殺掉。例如N=6,M=5,被殺掉的順序是:5,4,6,2,3,1。 輸出被殺人的編號順序 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 using namespace std; 5 struct node{ 6 int x; 7 node* next; 8 }; 9 node* creatlist(int n) 10 { 11 int i; 12 node *temp=NULL,*head=NULL,*tail=NULL; 13 for(i=0;i<n;i++) 14 { 15 if(head==NULL) 16 { 17 head=(node*)malloc(sizeof(node)); 18 head->x=i+1; 19 tail=head; 20 } 21 else 22 { 23 temp=(node*)malloc(sizeof(node)); 24 temp->x=i+1; 25 //temp->next=NULL; 26 tail->next=temp; 27 tail=temp; 28 } 29 } 30 tail->next=head; 31 return head; 32 } 33 void output(node* head) 34 { 35 node* p=head; 36 while(p!=NULL) 37 { 38 cout<<p->x<<' '; 39 p=p->next; 40 } 41 } 42 node* find(int k,node* head) 43 { 44 int i=0; 45 node *p=head; 46 for(i=0;i<k-1;i++) 47 p=p->next; 48 return p; 49 } 50 void out(node* p,int m) 51 { 52 int i=0; 53 node *pre=NULL; 54 while(p->next!=p) 55 { 56 for(i=0;i<m-1;i++) 57 { 58 pre=p; 59 p=p->next; 60 } 61 cout<<p->x<<' '; 62 pre->next=p->next; 63 p=p->next; 64 } 65 cout<<p->x; 66 } 67 int main() 68 { 69 int n,k,m; 70 node *head,*p; 71 cin>>n>>k>>m; 72 head=creatlist(n); 73 //output(head); 74 p=find(k,head); 75 cout<<p->x<<endl; 76 out(p,m); 77 }

?

轉載于:https://www.cnblogs.com/a1225234/p/4615965.html

總結

以上是生活随笔為你收集整理的约瑟夫问题的循环链表实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。