约瑟夫问题c++
2015-05-05 20:36
246 查看
问题描述:一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(n个)按照1-m的顺序围坐一圈,从第1开始数,每数到第m个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
解决1:使用数组存放
解法二,使用循环链表
解决1:使用数组存放
#define Maxsize 1000 void jose(int n,int m) { int mon[Maxsize]; int i,d,count; for (i=0;i<n;i++) mon[i]=i+1; cout<<"Befoue out:"<<endl; for (i=0;i<n;i++) cout<<mon[i]<<","; cout<<endl; cout<<"After out:"<<endl; count=0; i=-1; //函数的实现 while(count<n) { d=0; while(d<m) { i=(i+1)%n; if (mon[i]!=0) d++; } cout<<mon[i]<<","; mon[i]=0; count++; } cout<<endl; }
解法二,使用循环链表
typedef struct LNode { int data; struct LNode *link; }LNode,*LinkList; void jose(int n,int m) { LinkList p,pcur; p=(LinkList)malloc(sizeof(LNode)); //第一只猴子单独拉出来了 p->data=1; //循环单链表 p->link=p; pcur=p; for (int i=1;i<n;i++) { LinkList tmp=(LinkList)malloc(sizeof(LNode)); tmp->data=i+1; tmp->link=pcur->link; pcur->link=tmp; pcur=tmp; } while(n--) { LinkList tmp; for (int s=m-1;s--;tmp=p,p=p->link); tmp->link=p->link; cout<<p->data<<"->"; free(p); p=tmp->link; } cout<<endl; }
相关文章推荐
- 约瑟夫问题(c++)
- 经典算法<二>约瑟夫问题 C++实现
- queue队列的建立及使用,约瑟夫问题C/C++的解决
- C++循环链表实现约瑟夫问题
- 约瑟夫问题的实现(c++链表版)
- 单循环链表的约瑟夫问题(C++)
- 约瑟夫问题的Python和C++求解方法
- C++ HOJ 约瑟夫问题 的 数组、链表及STL实现
- 约瑟夫问题源码(用c++编写)——————凌风
- 约瑟夫问题c++
- 约瑟夫问题的Python和C++求解方法
- c++ 数据结构 用循环单链表解决约瑟夫问题
- C++[算法]用数组模拟约瑟夫问题,即 N个人围成一圈,顺时针每数到给定K值的人出列,直到剩下最后一个人,求出圈人的序号顺序
- 面试题六 C/C++面试秘笈 之约瑟夫问题的解答--程序员面试题
- 约瑟夫问题之c++单链表版
- 约瑟夫问题——循环链表C++
- 约瑟夫问题C++求解
- 约瑟夫问题的数学解(C++)
- (编程题目)约瑟夫问题(实用C++编出一个程序解决约瑟夫问题)--凌风
- 约瑟夫问题的C++实现