约瑟夫问题的循环链表实现
2015-07-02 14:26
309 查看
据说著名犹太历史学家 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。
输出被杀人的编号顺序
17世纪的法国数学家加斯帕在《数目的游戏问题》中讲了这样一个故事:15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如此循环进行直到仅余15个人为止。问怎样排法,才能使每次投入大海的都是非教徒。
一般形式:N个人围成一圈,从第k个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。
输出被杀人的编号顺序
#include <iostream> #include <cstdio> #include <cstdlib> using namespace std; struct node{ int x; node* next; }; node* creatlist(int n) { int i; node *temp=NULL,*head=NULL,*tail=NULL; for(i=0;i<n;i++) { if(head==NULL) { head=(node*)malloc(sizeof(node)); head->x=i+1; tail=head; } else { temp=(node*)malloc(sizeof(node)); temp->x=i+1; //temp->next=NULL; tail->next=temp; tail=temp; } } tail->next=head; return head; } void output(node* head) { node* p=head; while(p!=NULL) { cout<<p->x<<' '; p=p->next; } } node* find(int k,node* head) { int i=0; node *p=head; for(i=0;i<k-1;i++) p=p->next; return p; } void out(node* p,int m) { int i=0; node *pre=NULL; while(p->next!=p) { for(i=0;i<m-1;i++) { pre=p; p=p->next; } cout<<p->x<<' '; pre->next=p->next; p=p->next; } cout<<p->x; } int main() { int n,k,m; node *head,*p; cin>>n>>k>>m; head=creatlist(n); //output(head); p=find(k,head); cout<<p->x<<endl; out(p,m); }
相关文章推荐
- 各语言中取整的运用
- java实现文件上传并预览效果
- LeetCode-House Robber II-解题报告
- [leetcode] 121. Best Time to Buy and Sell Stock
- http://blog.sina.com.cn/s/blog_4e7859dd01009xds.html
- 关于企业信息系统建设的几点思考
- [前端] marquee使用
- ar技术序章-SDK介绍和选择
- Java中的集合类型的继承关系图
- Win10预览版10159更新内容汇总(视频预览)
- C++11中的std::function
- 荣云SDK2.0集成
- 希望帮对了人
- js判断是android访问还是ios访问
- 利用IDEA工具开发Hadoop2.6,win7下远程连接到hdfs。
- 单例模式
- springmvc学习笔记---idea创建springmvc项目
- 粒子效果的总结
- html5 之 canvas 相关知识(二)API-fillStyle
- ASIHttpRequest框架使用说明-----post请求 以及监听网络