数组——约瑟夫问题
2013-09-09 23:05
246 查看
求解约瑟夫问题:设有n个人站成一个圈,其编号为1——n,从编号为1的人开始顺时针“1,2,3...”循环报数,数到m的人出列,然后从出列者的下一个重新开始报数,数到m 的人又出列,如此重复进行下去,直到n个人都出列为止。要求输出这n个人的出列顺序。
算法思路:采用一维数组p[],先将n个人的编号存入p[0]——p[n-1]。从编号为1的人(下标t=0)开始循环报数,数到m的人(下标t=t+m-1%i),输出p[t]并将其从数组中删除,(即将后面的元素前移一位),因此每次报数的起始位置就是上次报数的出列位置,反复执行下去。
算法如下:
算法思路:采用一维数组p[],先将n个人的编号存入p[0]——p[n-1]。从编号为1的人(下标t=0)开始循环报数,数到m的人(下标t=t+m-1%i),输出p[t]并将其从数组中删除,(即将后面的元素前移一位),因此每次报数的起始位置就是上次报数的出列位置,反复执行下去。
算法如下:
void josephus(int n,int m) { int *p; p=new int [MaxSize]; int i,t=0,j; for(i=0;i<n;i++) { p[i]=i+1; } for(i=n;i>0;i--) { t=(t+m-1)%i; cout<<p[t]<<" "; for(j=t+1;j<i-1;j++) { p[j-1]=p[j]; } } cout<<endl; delete []p; }
相关文章推荐
- 有关环形数组的约瑟夫问题
- codevs 1282 约瑟夫问题 树状数组正解 解题报告
- java数组解决约瑟夫(Josephus)问题
- 约瑟夫问题(数组实现)
- C++ HOJ 约瑟夫问题 的 数组、链表及STL实现
- 小孩报数-约瑟夫问题数组链表
- 数组实现的约瑟夫问题(Java)
- 构造数组MaxTree、环形单链表的约瑟夫问题等总结
- 关于约瑟夫_Joesphus问题(C语言数组解决)
- 约瑟夫问题 数组(最好还是用循环指针)
- 【Codevs1282】 约瑟夫问题 树状数组 (11/1000)
- 约瑟夫问题的数组实现
- php关联数组,20行搞定约瑟夫问题
- The Second Blog -数组实现约瑟夫问题-C语言
- 约瑟夫问题的数组实现
- 约瑟夫问题---数组实现
- PHP基于关联数组20行代码搞定约瑟夫问题示例
- 数组——约瑟夫问题
- 循环链表范例(约瑟夫问题) 数组实现
- 4851:【一维数组】约瑟夫问题 分数: 3