多语言展示
当前在线:145今日阅读:167今日分享:16

约瑟夫环问题

约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列
工具/原料
1

编程环境:CodeBlocks

2

运行环境:Windows8

方法/步骤
1

约瑟夫环(约瑟夫问题)是一个非常经典的数学的应用问题:简化来说就是已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。开始从编号为k的人报数,数到数字为m的那个人出列;继续,他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列!

2

Josephus有过的故事:39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓。于是决定了自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀。然后下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。

3

这是一个典型的循环链表题目。我们需要创建一个循环链表,依照游戏规则,依次进行删除结点操作。直至链表为空,打印出的元素顺序即为出局顺序!

4

下面用C语言写出约瑟夫环问题的程序,创建链表,添加数据,依次删除结点操作,直到链表为空表,源代码如下:

5

我们可以任意设置个数n,以及间隔m:下图为一个实例的运行结果,模拟了经典的约瑟夫问题,41人,间隔3人,最后就是16号和31号逃脱!

6

这个题目可以很好的锻炼初学者对于链表,指针,以及循环的概念理解!

推荐信息