约瑟夫环问题
来源:互联网 发布:linux连接数据库命令 编辑:程序博客网 时间:2024/04/30 12:05
Problem Description
对任意n个人,密码为m,实现约瑟夫环问题。约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
Input
每行为一组数据,包括2个正整数n和m(n,m>0)。
Output
依次写出出圈的顺序,数字之间用一个空格分隔。
Sample Input
6 37 3
Sample Output
3 6 4 2 5 13 6 2 7 5 1 4
Author
Source
mnnu14级软件1-2班作业10——链表
Recommend
zh
#include<iostream>
using namespace std;typedef struct LNode
{
int data;
struct LNode *link;
}LNode, *LinkList;
void Josephus(int n, int k, int m) // n个人,从第k个人开始报数,m为出列者喊到的数
{
LinkList p, r, cur; // p为当前结点,r为p的前驱
p = new LNode;
if(!p)
{
cout << "The failure of memory allocated!" << endl;
}
p->data = n;
p->link = p; //循环链表
cur = p;
for(int i=1; i<n; i++)
{
LinkList t = new LNode;
if(!t)
{
cout << "The failure of memory allocated!" << endl;
}
t->data = i;
t->link = cur->link;
cur->link = t;
cur = t;
}
//移动当前指针到k
while(k--)
{
r = p;
p = p->link;
}
//报数为m的人出列
while(n--)
{
for(int s=m-1; s--; r=p, p = p->link);
if(n==0)
{
cout<<p->data<<endl;
}
else
{
cout << p->data <<" ";
r->link = p->link;
LinkList d = new LNode;
d = p;
p = r->link;
delete d;
}
}
}
int main()
{
int a,b;
while(cin>>a)
{
cin>>b;
Josephus(a,1,b);
}
return 0;
}
0 0
- 约瑟夫问题、约瑟夫环
- Josephus约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题(Josephus)
- 约瑟夫环问题--java
- 约瑟夫环问题 Josephus
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 求解约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- Spring MVC注解配置结合Hibernate的入门教程及其代码实例
- No1 程序启动原理
- HTML5学习之css3.0
- ETL 浅谈
- 理解数据库的几种键和几个范式
- 约瑟夫环问题
- iOS ----Block语法
- 宗宁:如何工作一年获得三年的经验
- 最小二乘法
- Maven学习总结(四)——Maven核心概念
- hadoop eclipse windows
- UVA_725: Division
- POJ 2032 搜索 (IDA*) 或 DLX
- android系统开发中log的使用方法