约瑟夫环

原创 2016年06月01日 00:05:29

一、典故:

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

      41个人排成一个圆圈,由第1个人 开始报数,每数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从,Josephus要 他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。

二、用循环链表实现

1.约瑟夫环实现

sListNode* JosephCycle(sListNode* pHead, DataType x)
{
 if(pHead == NULL)
  return NULL; 
 sListNode* cur = pHead;
 while(1)
 {
  DataType m = x;
  if(cur->next == cur)
  {
   return cur;
  }
  while(--m)
  {
   cur = cur->next;
  }
  //delete替换法
  cur->data = cur->next->data;
  sListNode* del = cur->next;
  cur->next = cur->next->next;
  free(del);
  del=NULL;
 }

2.测试

void TestJosephCycle()
{
 sListNode* list = NULL;
 Push_Back(list, 1);
 Push_Back(list, 2);
 Push_Back(list, 3);
 Push_Back(list, 4);
 Push_Back(list, 5);
 Push_Back(list, 6);
 Push_Back(list, 7);
 Push_Back(list, 8);
 Push_Back(list, 9);
 PrintList(list);
 //建环
 sListNode* cur = list;
 while(cur->next != NULL)
 {
  cur = cur->next;
 }
 cur->next = list;
 sListNode* ret = JosephCycle(list, 3);
 cout<<"Joseph:"<<ret->data<<endl;
 //解环
 free(ret); //明确知道只有一个节点,直接释放
 ret = NULL;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

C++经典题目:约瑟夫环问题

问题描述: 有n个人围成一圈,顺序排号。从第一个人开始报数(1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号。 分析: 首先由用户输入人数n,然后对这n个人进行编号【因为如果不编号的话...
  • QianShouYuZhiBo
  • QianShouYuZhiBo
  • 2013年09月26日 23:48
  • 2958

约瑟夫环C++实现很经典的做法

原文地址:http://www.cnblogs.com/hanxi/archive/2012/10/10/2718413.html /* *******循环链表解决约瑟夫环问题******* * 问...
  • jzh1988903
  • jzh1988903
  • 2014年10月07日 14:52
  • 2297

【C语言】约瑟夫环(用单向循环链表解决)

约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围...
  • pointer_y
  • pointer_y
  • 2016年06月05日 19:42
  • 4125

约瑟夫环运算

  • 2014年09月11日 11:39
  • 2KB
  • 下载

约瑟夫环问题

  • 2016年07月05日 01:41
  • 771B
  • 下载

数据结构实验报告 约瑟夫环

  • 2017年11月10日 07:23
  • 204KB
  • 下载

约瑟夫环数据结构

  • 2017年11月17日 23:06
  • 1KB
  • 下载

数据结构——制作约瑟夫环

  • 2015年05月17日 17:49
  • 47KB
  • 下载

java simith数和约瑟夫环问题代码

  • 2014年09月23日 18:23
  • 61KB
  • 下载

约瑟夫环问题

  • 2016年05月09日 23:53
  • 54KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:约瑟夫环
举报原因:
原因补充:

(最多只允许输入30个字)