生活随笔
收集整理的這篇文章主要介紹了
循环链表解决约瑟夫问题(简化版)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://blog.csdn.net/jw903/article/details/38965477
約瑟夫環是一個經典的數學的應用問題:已知N個人(以編號1,2,3...N分別表示)圍坐在一張圓桌周圍。從編號為1的人開始報數,數到M的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重復下去,直到圓桌周圍的人全部出列。
這個代碼非常簡短,但還是利用循環鏈表完成了求解約瑟夫問題的功能
代碼如下:
[cpp]?view plain
?copy #include<iostream>?? #include<cassert>?? using?namespace?std;?? typedef?struct?Node?? {?? ????int?item;?? ????struct?Node?*next;?? }ListNode,*List;?? int?main()?? {?? ????int?M;?? ????int?N;?? ????int?a;?? ????int?i;?? ????cout<<"input?the?N?and?M"<<endl;?? ????cin>>N>>M;?? ????List?head=(List)malloc(sizeof(ListNode));?? ????assert(head!=NULL);?? ????cin>>a;?? ????head->item=a;?? ????head->next=head;?? ????ListNode?*p=head;?? ????for(i=2;i<=N;i++)?? ????{?? ????????cin>>a;?? ????????p->next=(List)malloc(sizeof(ListNode));?? ????????p=p->next;?? ????????p->item=a;?? ????????p->next=head;?? ????}?? ????while(p!=p->next)?? ????{?? ????????for(i=1;i<M;i++)?? ????????????p=p->next;?? ????????ListNode?*targetnode=p->next;?? ????????cout<<targetnode->item<<"出局"<<endl;?? ????????p->next=p->next->next;?? ????????free(targetnode);?? ????}?? ????cout<<p->item<<endl;?? ????return?0;?? }??
總結
以上是生活随笔為你收集整理的循环链表解决约瑟夫问题(简化版)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。