由m个人围成一个首尾相连的圈报数。从第一个人开始,从1开始报数,报到n的人出圈,剩下的人继续从1开始报数,直到所有的人都出圈为止。对于给定的m和n,求出所有人的出圈顺序.
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->import java.util.Scanner;
/**
*使用数组实现约瑟夫环问题
*由m个人围成一个首尾相连的圈报数。
*从第一个人开始,从1开始报数,报到n的人出圈,
*剩下的人继续从1开始报数,直到所有的人都出圈为止。
*对于给定的m和n,求出所有人的出圈顺序.
*/
public class RingTest{
public static void main(String[] args){
System.out.println("程序说明如下:");
System.out.println("由m个人围成一个首尾相连的圈报数。从第一个人开始,从1开始报数,报到n的人出圈,剩下的人继续从1开始报数,直到所有的人都出圈为止。对于给定的m和n,求出所有人的出圈顺序.");
//提示输入总人数
System.out.println("请输入做这个游戏的总人数:");
Scanner sca=new Scanner(System.in);
int m=sca.nextInt();
//提示输入要出圈的数值
System.out.println("请输入要出圈的数值:");
int n=sca.nextInt();
System.out.println("按出圈的次序输出序号:");
//创建有m个值的数组
int[] a=new int[m];
//初始长度,以后出圈一个,长度就减一
int len=m;
//给数组赋值
for(int i=0;i<a.length;i++)
a[i]=i+1;
//i为元素下表,j代表当前要报的数
int i=0;
int j=1;
while(len>0){
if(a[i%m]>0){
if(j%n==0){//找到要出圈的人,并把圈中人数减一
System.out.print(a[i%m]+" ");
a[i%m]=-1;
j=1;
i++;
len--;
}else{
i++;
j++;
}
}else{//遇到空位了,就跳到下一位,但j不加一,也就是这个位置没有报数
i++;
}
}
}
}
分享到:
相关推荐
java实现约瑟夫环问题Josephus 约瑟夫问题 * 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k(1,2,3...n)的人开始报数,数到m(1,2,3...)的那个人出列; * 他的下一个人又从1开始报数,...
用JAVA实现约瑟夫环
循环链表 实现约瑟夫环 java 自己写的 测试通过 有注释
约瑟夫环是一个数学的应用问题: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,...
下面是使用 Java 实现约瑟夫环问题的代码示例: ```java import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { int n = 10; // 总人数 int m = 3...
现在,让我们来看一下 Java 实现约瑟夫环问题的代码。首先,我们需要创建一个名为 `ex2_21` 的 Java 类,用于实现约瑟夫环问题。 ```java package sch.exercise; public class ex2_21 { public static void main...
使用JAVA实现约瑟夫环,可以输入任意一组数字
用Java和Python实现约瑟夫环算法的代码示例.zip 用Java和Python实现约瑟夫环算法的代码示例.zip 用Java和Python实现约瑟夫环算法的代码示例.zip 用Java和Python实现约瑟夫环算法的代码示例.zip 用Java和Python实现...
约瑟夫环问题Java代码实现 约瑟夫环问题是一种经典的算法问题,指的是在一个圆形排列的n个人中,每次从1开始报数,凡是报到m的人出局,问最后出局的人是谁。这个问题可以使用Java语言来实现。 约瑟夫环问题的Java...
在本实验中,我们将深入探讨如何用Java实现约瑟夫环问题的解决方案。 约瑟夫环问题描述如下:假设有一群人围成一个圈,按照顺时针方向依次编号。每次从某个人开始,每隔固定的人数淘汰一人,直到剩下最后一个人为止...
约瑟夫环java实现
java用数组实现的约瑟夫环问题。代码简单易懂。
### Java 实现约瑟夫环 #### 背景与概念 约瑟夫问题(Josephus problem)是一个经典的计算机科学问题,源自古罗马时期的数学难题。这个问题描述为:一群人在围成一圈,按照一定的顺序报数,每报到某个特定数字的人...
在Java中实现约瑟夫环,通常会用到链表(LinkedList)或者数组(Array)来模拟环形结构。以下是一个基于链表实现的约瑟夫环算法: 1. 首先,我们需要创建一个表示人的节点类(Node),包含两个属性:一个存储该节点...
本篇将详细介绍两种通过Java顺序表实现约瑟夫环的方法。 **方法一:通过数组移动** 在这种方法中,我们首先创建一个数组来模拟环状结构,数组的索引代表每个人的编号。每次执行“杀掉”操作时,我们将数组中指定...
约瑟夫环问题,也称为约瑟夫斯问题,是一个著名的理论问题,源自古罗马的传说。在数学和计算机科学领域,它被用来探讨和展示各种数据结构和算法的解决方案。这个问题的基本设置是:一群人站成一个圆圈,从某个人开始...
用循环队列解决约瑟夫环问题减少用顺序表在出对是循环移动带来的空间复杂度
约瑟夫环是一种经典的数据结构问题,通过 Java 语言来实现约瑟夫环,可以让我们更好地理解算法和数据结构的思想。下面,我们将对约瑟夫环的设计实现进行详细的介绍。 课程设计介绍 约瑟夫环是一种典型的循环链表...
通过简单的程序解决约瑟夫环问题 c++文件