问题:n = 7人坐在一圈,从1开始报数,报到m = 20的人出列,将他的密码作为新的m,直到所有的人出列。密码依次为:3、1、7、2、4、8、4。
使用JAVA数组实现:
public static void main(String[] args) { int m = 20; Character[] people = {'A','B','C','D','E','F','G'}; int length = people.length; int num = length; Integer[] password = {3,1,7,2,4,8,4}; int index = 0; int position = 1; while (num > 0) { if (m == position) { num --; System.out.print(people[index]); System.out.print('\t'); people[index] = null; position = 0; m = password[index]; } index = (++index % length); if (people[index] != null) { position ++; } } }
使用LinkedList实现:
public static void main(String[] args) { char[] p = {'A','B','C','D','E','F','G'}; int[] w = {3,1,7,2,4,8,4}; List<Character> people = new LinkedList<Character>(); List<Integer> password = new LinkedList<Integer>(); for (int i = 0; i < w.length; i++) { people.add(p[i]); password.add(w[i]); } int index = 0 ; int position = 1; int num = people.size(); int m = 20; while (num > 0) { if (position == m) { System.out.print(people.remove(index)); System.out.print('\t'); m = password.remove(index); num --; position = 1; if (index >= people.size()) { index = 0; } } else { if (num > 0) { if (index >= people.size() -1) { index = 0; } else { index ++; } position ++; } } } }
上面是我的实现方法。一定还有更好的解决方法。欢迎大家指点。
相关推荐
约瑟夫环问题的Java代码实现可以使用数组和循环来解决。下面是代码实现的详细解释: 首先,我们需要引入Java的 util包,以便使用Scanner类和Arrays类。然后,我们定义了一个名为TableTenPeoper的类,其中包含了main...
在这个项目中,"利用java写的约瑟夫环",开发者使用Java来编写代码,解决了这个问题。Eclipse是一个强大的集成开发环境(IDE),提供了丰富的工具和功能,使得Java程序的开发、调试和测试变得更为便捷。在Eclipse...
本篇将详细介绍两种通过Java顺序表实现约瑟夫环的方法。 **方法一:通过数组移动** 在这种方法中,我们首先创建一个数组来模拟环状结构,数组的索引代表每个人的编号。每次执行“杀掉”操作时,我们将数组中指定...
约瑟夫环问题,也称为约瑟夫环序列或约瑟夫问题,是一个著名的理论问题,源自古罗马历史上的一个故事。在这个问题中,人们站成一个圈,并按顺时针方向从某个人开始计数,每当数到特定数值的人就会被排除出圈,然后从...
Java约瑟夫环(Josephus Problem)是一种经典的理论问题,源于古罗马的一种传说。在编程领域,它通常被用来作为算法设计的练习。Java Applet是Java早期的一种小程序,可以在Web浏览器中运行,用于实现交互式的图形...
约瑟夫环(Josephus Problem)是一个著名的理论问题,源于公元前一世纪犹太历史学家约瑟夫·弗拉维乌斯讲述的一个故事。在该问题中,人们站成一个圈并按照顺序报数,每报到特定数值的人会被排除出圈,直到只剩下最后...
该问题通常被用来探讨和理解数据结构与算法,特别是循环链表和数组在解决问题中的应用。在这个问题中,人们围成一个圈,按照一定的规则从某个人开始报数,每报到特定数字的人会被排除出圈,直到只剩下最后一个人为止...
两种方法都是基于循环和计数的策略来解决约瑟夫环问题。集合实现更便于元素的添加和删除,而数组实现则更适合直接操作元素值。这两种方法都可以有效地找到约瑟夫环问题的解,但效率上,数组实现可能会稍微快一些,...
穷举算法是一种简单的解决问题的方法,它通过尝试所有可能的情况来找到正确的答案。在JOSEPH问题中,穷举算法意味着程序会模拟每一次报数过程,直到只剩下一只猴子。 首先,程序通过`Scanner`类获取用户输入的两个...
5. **迭代或递归**:解决约瑟夫环问题可以采用迭代或递归两种方法。迭代通常使用循环结构,逐个遍历链表并执行淘汰操作;递归则通过函数调用自身,每次调用处理掉一个节点,直到链表只剩下一个节点。 6. **效率考虑...
在实际编程中,这个问题可以使用多种编程语言(如 C、C++、Java、Python 等)来解决,实现方式大同小异,关键在于理解和运用链表数据结构以及算法设计。 总的来说,约瑟夫环问题的单链表实现是一个锻炼数据结构基础...
《约瑟夫环 Java 实现详解》 约瑟夫环,又称为约瑟夫问题,是一个著名的理论问题,源自古罗马...通过解决这个问题,程序员可以提升对Java语言的理解,锻炼解决问题的能力,以及在实践中掌握面向对象编程的核心思想。
约瑟夫问题(Josephus Problem)是一个...通过以上分析,我们了解了约瑟夫问题的基本概念,以及如何使用Java实现该问题的解决方案。理解并掌握这种问题的算法设计思路对于提升编程能力和解决实际问题具有重要的意义。
Java课程的实验2旨在让学生通过编写代码来理解和解决约瑟夫环问题,以此来提升他们的编程能力,特别是对递归或动态规划的理解。递归是一种函数调用自身的技术,常用于解决具有自相似性质的问题,而动态规划则是一种...
文件"衣萌.doc"可能包含了使用某种编程语言(如Python、Java或C++)实现约瑟夫环的具体代码示例。代码通常会包含初始化环形结构、报数和剔除过程的逻辑。例如,Python代码可能如下: ```python def josephus(n, m):...
这个Java实现有效地运用了链表数据结构来解决约瑟夫环问题,展示了如何用面向对象的方式构造和操作数据结构。通过这种方式,我们不仅可以理解约瑟夫环的算法逻辑,还能学习到Java中链表的创建、遍历和修改等基本操作...
在这个实验中,学生通常会使用编程语言(如C++、Java或Python)来实现约瑟夫环。实现的关键在于选择合适的数据结构。常见的方法有两种: 1. **链表实现**:每个节点代表一个人,包含其编号和指向下一个节点的指针。...
这里的"ysf.java"文件很可能包含了一个使用Java实现的约瑟夫问题解决方案。以下是对该问题的一种可能的Java实现方式: ```java public class Ysf { static class Node { int val; Node next; public Node(int ...
总的来说,这个压缩包提供的内容涵盖了数据结构中的基本元素——循环链表和二叉树,以及解决问题的算法——约瑟夫环的解决策略和二叉树的递归遍历。这些知识是计算机科学和软件工程领域的基础,对于学习者深入理解...
在压缩包中的"约瑟夫环"文件可能包含了这个问题的代码实现,包括用不同编程语言(如Python、Java或C++)编写的程序示例,以及可能的测试用例和运行结果。通过阅读和理解这些代码,你可以更好地掌握约瑟夫环问题的...