约瑟夫环问题可以简单的使用数组的方式实现,但是现在我使用循环链表的方法来实现,因为上午看到一道面试题规定使用循环链表解决约瑟夫环问题。

  什么是约瑟夫环?

  “约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。”(百度百科中的解决办法列出了很多,可以看到循环链表并不是最简单的方法)

  这道面试题考察了循环链表的“创建”,“遍历”和“删除”。

源代码如下:

#include<iostream>
using namespace std; struct MyNode
{
MyNode(int a_data):m_data(a_data),m_pNext(NULL){}
int m_data;
MyNode *m_pNext;
};
class Josephus
{
public:
Josephus(int a_N,int a_K,int a_M):m_N(a_N),m_K(a_K),m_M(a_M){
createList();
outputList();
}
protected:
void createList();
void outputList();
private:
MyNode *m_pHead; //循环链表的头节点
int m_N; //链表节点个数
int m_K; // 第一个报数人的序号
int m_M; // 报数出局的数
};
void Josephus::createList()
{
MyNode *pre = NULL;
MyNode *cur = NULL;
MyNode *p = new MyNode();
m_pHead = p;
cur = p;
for(int i=; i<=m_N;i++)
{
p = new MyNode(i);
pre = cur;
cur = p;
pre->m_pNext = p;
}
cur->m_pNext = m_pHead;
int n = m_N;
p = m_pHead;
cout << "初始序列为:" << endl;
while(n--){
cout << p->m_data << ",";
p = p->m_pNext;
}
cout << endl;
}
void Josephus::outputList()
{
// 让pStart指向第一个报数人的序号
MyNode *pStart = m_pHead;
int count = ;
while(count < m_K){
pStart = pStart->m_pNext;
count++;
}
MyNode *pTemp = pStart;
MyNode *pPre = NULL;
MyNode *tobeDeleted = NULL;
cout << "依次出局的序列为:" << endl;
while(pTemp->m_pNext!=pTemp) // when pTemp->m_pNext==pTemp only one node in the list
{
int count = ;
while(count < m_M){
pPre = pTemp;
pTemp = pTemp->m_pNext;
count++;
}
tobeDeleted = pTemp;
pTemp = pTemp->m_pNext;
pPre->m_pNext = pTemp;
cout << tobeDeleted->m_data << ",";
}
cout << pTemp->m_data << endl;
} int main()
{
int total_people;
int start;
int step;
cout << "请输入总人数:" << endl;
cin >> total_people;
cout << "请输入开始数的人:" << endl;
cin >> start;
cout << "请输入出局人数的数:" << endl;
cin >> step;
Josephus josephus(total_people,start,step);
return ;
}

运行程序结果如下:

C++循环链表解决约瑟夫环问题的更多相关文章

  1. golang数据结构之用循环链表解决约瑟夫环问题

    josephu.go package link import ( "fmt" ) type Kid struct { ID int next *Kid } func AddKid( ...

  2. javascript中使用循环链表实现约瑟夫环问题

    1.问题 传说在公元1 世纪的犹太战争中,犹太历史学家弗拉维奥·约瑟夫斯和他的40 个同胞被罗马士兵包围.犹太士兵决定宁可自杀也不做俘虏,于是商量出了一个自杀方案.他们围成一个圈,从一个人开始,数到第 ...

  3. 循环列表的Java实现,解决约瑟夫环问题

    import java.util.Scanner; /** * 循环列表的Java实现,解决约瑟夫环问题 * * @author LIU * */ public class LinkedList { ...

  4. php解决约瑟夫环的问题

    php里面解决约瑟夫环还是比较方面的,但是下面的方法太费空间 <?php class SelectKing{ private $m;//幅度 private $n;//总数 public fun ...

  5. PHP解决约瑟夫环问题

    PHP解决约瑟夫环问题 一.总结 二.PHP解决约瑟夫环问题 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到 ...

  6. 单向环形链表解决约瑟夫环(Josephus)问题

    一.约瑟夫环问题 Josephu 问题为:设编号为1,2,- n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那 ...

  7. C语言单向循环链表解决约瑟夫问题

    据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,4 ...

  8. Java循环链表实现约瑟夫环(搬运)

    public class Josephus { static class Node{ int val; Node next; Node(int v){ val=v; } }//成员类,代表节点,类似于 ...

  9. 10行Python代码解决约瑟夫环(模拟)

    http://blog.csdn.net/dengyaolongacmblog/article/details/39208675 #!/usr/bin/env python # coding: utf ...

随机推荐

  1. 洛谷 P1233 木棍加工 解题报告

    P1233 木棍加工 题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间 ...

  2. Linux内核分析第四周学习总结——系统调用的工作机制

    Linux内核分析第四周学习总结--系统调用的工作机制 内核态 执行级别高,可以执行特权指令,访问任意物理地址,在intel X86 CPU的权限分级为0级. 用户态 执行级别低,只能访问0x0000 ...

  3. 洛谷 P1410 子序列(DP)

    这题的题解的贪心都是错误的...正解应该是个DP 考虑有哪些有关的条件:两个序列的当前长度, 两个序列的末尾数, 把这些都压进状态显然是会GG的 考虑两个长度加起来那一位的数一定是其中一个序列的末尾, ...

  4. 浴谷八连测R6题解(收获颇丰.jpg)

    这场的题都让我收获颇丰啊QWQ 感谢van♂老师 T1 喵喵喵!当时以为经典题只能那么做, 思维定势了... 因为DP本质是通过一些条件和答案互相递推的一个过程, 实际上就是把条件和答案分配在DP的状 ...

  5. 使用Hexo写博客

    首先,你需要搭建一个Hexo博客网站- 使用Hexo搭建GitHub博客(2018年Mac版) 原生方式新建文章 Hexo的项目结构是在网站根目录的source/_posts目录下存放你的博客文档,以 ...

  6. 防止xss攻击的核心代码

    public class XssFilter implements Filter { @Override public void destroy() { } /** * 过滤器用来过滤的方法 */ @ ...

  7. bzoj 2929 [Poi1999]洞穴攀行 网络流

    2929: [Poi1999]洞穴攀行 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 499  Solved: 295[Submit][Status][ ...

  8. 010. C++ 传值与传引用

    1.参数传递 参数传递:pass by value vs. pass by reference(to const) 推荐:能传引用,尽量传引用(高效,尤其在需要拷贝的对象很大时) class comp ...

  9. 【机器学习】K-邻近算法的python 实现

    #!/usr/bin/python # -*- coding: utf-8 -*- from numpy import * import operator def createDataSet(): ' ...

  10. 2017 ACM-ICPC 西安网络赛 F.Trig Function Chebyshev多项式

    自己太菜,数学基础太差,这场比赛做的很糟糕.本来想吐槽出题人怎么都出很数学的题,现在回过头来想还是因为自己太垃圾,竞赛就是要多了解点东西. 找$f(cos(x))=cos(nx)$中$x^m$的系数模 ...