据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特後,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。
然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
php 实现代码
$person_num = 41;
$person_count = 3;
$persons = array();
for($i=1;$i<=$person_num;$i++)
{
$next = $i;
if($i==$person_num)
{
$next = 0;
}
$persons[] = array($i, $next);
}
$next = 0;
$i = 0;
$next_next = 0;
while(count($persons)>1)
{
$i++;
if($i==($person_count-1))
{
echo "out:" . $persons[$persons[$next][1]][0] . "\n";
$next_next = $persons[$next][1];
$persons[$next][1] = $persons[$persons[$next][1]][1];
unset($persons[$next_next]);
$i = 0;
}
$next = $persons[$next][1];
}
echo "left:" . $persons[$next][0] . "\n";
output:
out:3
out:6
out:9
out:12
out:15
out:18
out:21
out:24
out:27
out:30
out:33
out:36
out:39
out:1
out:5
out:10
out:14
out:19
out:23
out:28
out:32
out:37
out:41
out:7
out:13
out:20
out:26
out:34
out:40
out:8
out:17
out:29
out:38
out:11
out:25
out:2
out:22
out:4
out:35
out:16
left:31
分享到:
相关推荐
labview的josephus问题编程
编程求Josephus问题:m个小孩围成一圈,从第一个小孩开始顺时针方向每数到第n个小孩时这个小孩就离开,最后剩下的一个小孩是胜利者。求第几个小孩是胜利者。
教你如何用数据结构的思想来解决Josephus问题 而且是用C来描述的喔
Josephus问题的解答,分别使用不同的方法
用链式存储结构实现Josephus问题,用户按照执行提示输入n、s、m,输出题目要求的出列顺序
生活不易,赚点积分...C语言实现,大二作业...
设有n个人围坐一圈并由1到n编号,从某个人开始报数,数到m的人出列,接着从出列的下一个人开始重新1到n报数,数到m的人又出列,如此反复地报数和出列,直到最后一个人出列为止,设计确定这n个人出列序列的程序
关于Josephus问题数学公式推导和论证的几篇论文
用c++解决了josephus问题:有n个人围在一个圆桌周围,现从第s个人开始报数,数到第m个人又出列…如此反复直到所有的人全部出列为只止。
Josephus 问题的 C 语言代码 ,链表实现,有查找抄作
Josephus问题的顺序表实现 关于Josephus问题的顺序表实现
自己用VC编写的解决Josephus问题,能够根据任何输入得出最终结果,还算健壮,供大家参考,如有好意见欢迎讨论
Josephus问题向量实现,已经运行成功了,代码简单易懂,
这个完全符合课本上习题的要求,我作业交的就是这个,我自己还在里面做了详细的注释
用顺序存储结构实现Josephus问题,用户按照执行提示输入n、s、m,输出题目要求的出列顺序
Josephus问题可以描述为如下的一个游戏:N个人编号从1到N,围坐成一个圆圈,从1号开始传递一个热土豆,经过M次传递后拿着土豆的人离开圈子,由坐在离开的人的后面的人拿起热土豆继续进行游戏,直到圈子只剩下最后一...
数据结构实验报告,用C写的Josephus问题的使用链表和向量的简单实现。