约瑟夫环: 一个杀人游戏算法

作者: C语言基础 | 来源:发表于2019-03-14 15:51 被阅读16次

循环链表

把链表的两头连接,使其成为了一个环状链表,通常称为循环链表。

和它名字的表意一样,只需要将表中最后一个节点的指针指向头结点,链表就能成环儿,如图1 所示。

图1 循环链表

需要注意的是,虽然循环链表成环状,但本质上还是链表,因此在循环链表中,依然能够找到头指针和首元节点等。循环链表和普通链表相比,唯一的不同就是循环链表首尾相连,其他都完全一样。

循环链表实现约瑟夫环

行文不易,新手上路,多多关注,这真的对我很重要,私信更有惊喜

约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(分别用编号 1,2,3,…,n 表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 开始,还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,直到圆桌上剩余一个人。

如图 2 所示,假设此时圆周周围有 5 个人,要求从编号为 3 的人开始顺时针数数,数到 2 的那个人出列:

图 2 循环链表实现约瑟夫环

出列顺序依次为:

编号为 3 的人开始数 1,然后 4 数 2,所以 4 先出列;

4 出列后,从 5 开始数 1,1 数 2,所以 1 出列;

1 出列后,从 2 开始数 1,3 数 2,所以 3 出列;

3 出列后,从 5 开始数 1,2 数 2,所以 2 出列;

最后只剩下 5 自己,所以 5 胜出。

约瑟夫环问题有多种变形,比如顺时针转改为逆时针等,虽然问题的细节有多种变数,但解决问题的中心思想是一样的,即使用循环链表。

通过以上的分析,我们可以尝试编写 C 语言代码,完整代码如下所示:

打开UC浏览器 查看更多精彩图片

行文不易,新手上路,多多关注,这真的对我很重要,私信更有惊喜

相关文章

  • 约瑟夫环: 一个杀人游戏算法

    循环链表 把链表的两头连接,使其成为了一个环状链表,通常称为循环链表。 和它名字的表意一样,只需要将表中最后一个节...

  • 算法-约瑟夫环

    有一个数组a[n]顺序存放0~n-1,要求每隔step个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉...

  • 约瑟夫环算法

    什么是约瑟夫环呢?约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在...

  • 算法--约瑟夫斯环

    n个人围成一个圆圈,编号为1~n,从第一号开始报数,报到m的倍数的人离开, 一直数下去,直到最后只有一个人, 求此人编号

  • 约瑟夫环问题

    约瑟夫环问题约瑟夫环描述:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围...

  • 二阶段day14-vim编辑器实操(python3)

    1、买鸡问题 2、约瑟夫环 3、扑克游戏 4、工资系统

  • 算法题—约瑟夫环问题

    前言 本文编程语言使用Java 问题概述 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕...

  • 循环单链表实现约瑟夫环(C语言)

    约瑟夫环

  • 约瑟夫环

    题目:100名学生围成一个圈, 编号从1到100,从第一名学生开始报数,从1-9报数 每报出9就退出,直到所有学生...

  • 约瑟夫环

网友评论

    本文标题:约瑟夫环: 一个杀人游戏算法

    本文链接:https://www.haomeiwen.com/subject/ldccmqtx.html