Josephus问题求解:
设有n个人围坐一个圆桌周围,,现从第S人开始报数,数到第m的人出列,
然后从出列的下一个重新开始报数,数列的第m个人又出列……如此重复,直
到所有的人全部出列为止。对任意给定的n、s、m,求按出列次序得到的n个
人员的顺序表。
分析:对于n个人,每一次出列一个人,余下的n-1个人仍然是一个Josephus问题,因此可以使用递归的方式,每次出列一个人,直到余下最后一个人。
public class Josephus {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
boolean[] nodes=new boolean[10];
for(int i=0; i<nodes.length; i++){
nodes[i]=false;
}
System.out.println("the left is "+ josephus(nodes,7,0,nodes.length));
}
public static int josephus(boolean[] nodes,int k, int start, int left){
if(left==1){ //剩下最后一个人,找到这个人的坐标返回
start=ignore(nodes,start);
return ++start;
}
int i=1; //从start开始计数,过滤掉出列的人,直到数到k-1
while(i<k){
if(nodes[start]==false){
i++;
}
start++;
if(start==nodes.length) start=0;
}
start=ignore(nodes, start);
nodes[start]=true; //找到数到k的人,出列
left--; //总人数减少
System.out.println("nodes is deleted,pos:"+(start+1));
return josephus(nodes,k,(++start)%nodes.length,left); //重新开始下一轮
}
private static int ignore(boolean[] nodes,int start){
while(nodes[start]) {
start++;
if(start==nodes.length) start=0;
}
return start;
}
}
运行结果:
nodes is deleted,pos:7
nodes is deleted,pos:4
nodes is deleted,pos:2
nodes is deleted,pos:1
nodes is deleted,pos:3
nodes is deleted,pos:6
nodes is deleted,pos:10
nodes is deleted,pos:5
nodes is deleted,pos:8
the left is 9
分享到:
相关推荐
通过上述知识点的分析和应用,基于Josephus问题的C语言教学设计旨在实现一个高效且具有趣味性的教学案例,不仅能够帮助学生理解并掌握C语言的基础知识,还能激发学生的学习兴趣,提高教学效果。
总的来说,约瑟夫环问题是一个挑战思维的趣味数学问题,它融合了数学的美和计算机科学的实用性,值得我们深入探讨和研究。通过解决这个问题,我们可以更好地理解递归、动态规划等重要概念,并锻炼我们的逻辑思维能力...
《简单Josephus环模拟器》是一款基于C#编程...通过这个模拟器,用户不仅能体验到Josephus问题的趣味性,还能深入理解C#编程和相关算法的应用。无论是对编程初学者还是经验丰富的开发者,这都是一个有价值的实践项目。
#### 一、约瑟夫(Josephus)问题 **问题描述:** 约瑟夫问题是经典的数组应用之一。该问题描述如下:假设$n$个人围坐成一圈,从第$s$个人开始按顺序报数,数到$m$的人会被淘汰出局,然后从被淘汰者下一位继续报数...
【PHP趣味算法实例详解】 1. **猴子选大王算法** 这是一个经典的环形序列问题,也称为约瑟夫环(Josephus Problem)。在这个问题中,猴子们按照编号排列,每数到第m只猴子就被淘汰,直到只剩下一个猴子,这个猴子...
"约瑟夫问题"(Josephus Problem)是一个著名的理论问题,源自古罗马时期的传说,它在计算机科学中常被用来探讨算法和数据结构的应用。在这个问题中,人们站成一个圈,按照一定的规则每隔一定数量的人被淘汰,直到只...
总的来说,约瑟夫问题是一个富有挑战性和趣味性的算法问题,它不仅锻炼了我们的逻辑思维能力,还启发我们寻找更高效的数据结构和算法。通过深入研究和实践,我们可以从中学习到如何处理复杂问题的策略和技巧。
约瑟夫问题,又称为约瑟夫环问题(Josephus Problem),是一个著名的理论问题,源自古罗马的一个传说。问题的基本设定是:人们按照一个固定的顺序站成一个圆圈,然后从某个人开始按顺时针方向计数,每数到特定数值的...
约瑟夫环(Josephus Problem)是一个著名的理论问题,源于古罗马时代的一个传说。这个问题是由数学家约瑟夫·弗雷德里克·本杰明·约瑟夫在1700年代提出,旨在探讨生存策略。在描述中提到的“有意思的、有趣!”,这...
"约瑟夫环"(Josephus Problem)是一个著名的理论问题,源自古罗马时期的传说,它在计算机科学中常被用来探讨和解决数据结构与算法的问题。猴子选大王是约瑟夫环的一种趣味化表述,通常用编程语言如C来实现。 ...
然而,这里的“杀人游戏源代码”并非指实际的游戏规则和流程实现,而是指用编程语言实现的一种模拟约瑟夫环(Josephus Problem)的算法。约瑟夫环是计算机科学中的一个经典问题,与数据结构和算法设计密切相关。 ...
本书每一章中都用大量实用性较强的例题阐述基本知识点,同时在每章的最后都提供一个有一定难度且趣味性较强的综合实例,将本章中多个知识点有机地结合起来,力求读者能把理论与实践紧密结合,体会解决实际问题的过程...