import java.util.Scanner;
/**
* 用数组实现约瑟夫出圈问题。
* 由m个人围成一个首尾相连的圈报数,从第一个人开始,从1开始报,
* 报到n的人出圈,剩下的人继续从1开始报数,直到所有的人都出圈为止。
* 对于给定的m和n,求出所有人的出圈顺序。
*/
public class ArrayTest
{
public static void main(String[] args)
{
System.out.println("程序说明");
System.out.println( " 由m个人围成一个首尾相连的圈报数," +
"从第一个人开始,从1开始报,报到n的人出圈," +
"剩下的人继续从1开始报数,直到所有的人都出圈为止。" +
"对于给定的m和n,求出所有人的出圈顺序。");
//提示输入总人数m
System.out.println("请输入做这个游戏的人数:");
Scanner sca=new Scanner(System.in);
int m=sca.nextInt();
//提示输入要出圈的数值n
System.out.println("请输入要出圈的数值:");
int n=sca.nextInt();
System.out.println("按出圈的次序输出序号:");
int[] a=new int[m];//创建数组a,为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)
{
//找到要出圈的人,并把圈中的人数减1
System.out.println(a[i%m]+" ");
a[i%m]=-1;//将出圈后的相应位置上置-1。
j=1;//重新报数,从1开始。
i++;
len--;//圈中人数减1。
}
else
{
//满足a[i%m]>0,但不满足j%n==0的情况
//这个位置有人,但所报的数不是n的整数倍
i++;
j++;
}
}else
{
//不满足a[i%m]>0的情况。(遇到空位了)
//跳到下一位,但j不自加(也就是这个位置不报数)
i++;
}
}
}
}
分享到:
相关推荐
在这个问题中,人们站成一个圈,并按照一定的规则从某个人开始报数,数到特定数字的人会被剔除出圈,然后从下一个人继续报数,直到只剩最后一个人为止。这个最后剩下的那个人被称为“幸存者”。 在Java中实现约瑟夫...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...
问题描述如下:一组人围成一个圈,从某个人开始按顺序报数,每次数到特定数值的人会被排除出圈,然后从下一个人继续报数,直到只剩下最后一个人为止,这个人被称为“大王”。在计算机科学中,约瑟夫环常被用来讨论和...
Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...
Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用...
根据给定文件的信息,我们可以提炼出以下几个Java编程相关的知识点: ### 1. 水仙花数 **标题描述:** “水仙花数”是指一个三位数,其各位数字立方和等于该数本身。 **代码实现:** ```java public class ...
在这个问题中,参与者围成一圈,从1开始按顺序报数,每数到特定数值(在这个例子中是5)的人会被淘汰,直到只剩最后一个人为止。我们需要编写Java程序来模拟这个过程,并输出整个淘汰的过程。 在Java编程中,解决这...
实验指导4-3中的`Josephus.java`利用了循环来实现约瑟夫环问题。`arrayOfJosephus` 方法使用了一个do-while循环,遍历数组并根据设定的条件(每3个孩子出局)更新数组元素,模拟孩子们出局的过程。循环处理确保了...
list下有双向链表、单向循环链表约瑟夫问题、单向链表 queue queue下面有普通的队列(是很浪费空间并且有毛病的)、正常使用的队列 sparseArray sparseArray下面是稀疏数组转换和恢复的例子 stack stack里面是数组栈...
4. **动态数据结构**:如堆栈(后进先出,LIFO)和队列(先进先出,FIFO),以及队列的变种,如优先队列(优先堆)。 在算法方面,本书可能涉及以下内容: 1. **排序算法**:如冒泡排序、插入排序、选择排序、快速...
3. **图形库/框架**:开发者可能使用了如Java Swing、JavaFX、Python的Tkinter、Qt、wxPython等图形库或框架来构建GUI。 4. **约瑟夫斯问题算法**:该程序的核心是实现约瑟夫斯问题的算法。可能采用了数组、链表等...
实验中还给出了约瑟夫环问题的实现,这是一个经典的计算机科学问题,通过顺序表来模拟报数过程,找到按照特定规则出列的顺序。 接下来,实验的第二部分关注单链表的实现。单链表是一种动态数据结构,每个节点包含...
这个问题描述了一个经典的游戏或算法,通常被称为"约瑟夫环"(Josephus Problem),在这个游戏中,人们围成一个圈按顺序报数,每报到特定数值"M"的人会被淘汰出局,然后从下一个人重新开始报数,直到只剩一个人为止...
实验项目涵盖了实际编程中的一些常见任务,如计算阶乘、绘制图形、找最大公约数和最小公倍数等,这些都是锻炼编程思维和问题解决能力的好例子。在实现过程中,会涉及到嵌套循环的使用(如在绘制杨辉三角时),以及...
每次数到特定数值的人会被排除出圈,然后从下一个人继续报数,直到只剩下最后一个人为止。这个最后剩下的那个人被称为“敢死队队长”。问题的关键在于找到一种有效的方法来确定这个队长。 解决敢死队问题的四种常见...
在这个例子中,n=5, k=2。 3. **验证括号是否匹配**:这是经典的栈应用问题,可以使用栈数据结构来检查括号是否正确配对。遇到左括号时入栈,遇到右括号时检查栈顶元素是否为相应的左括号,若是则弹出栈顶元素,...
在Java等编程语言中,ArrayList就是一个动态数组的例子。当数组满时,它会自动调整大小以适应更多的元素。然而,在C++等不提供内置动态数组的语言中,通常需要手动管理内存,例如通过指针和动态内存分配实现类似的...