`
BabyDuncan
  • 浏览: 584222 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

约瑟夫出圈java例子

    博客分类:
  • J2SE
阅读更多

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中实现约瑟夫...

    java源码包---java 源码 大量 实例

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    java源码包3

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...

    java源码包2

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...

    约瑟夫环代码

    问题描述如下:一组人围成一个圈,从某个人开始按顺序报数,每次数到特定数值的人会被排除出圈,然后从下一个人继续报数,直到只剩下最后一个人为止,这个人被称为“大王”。在计算机科学中,约瑟夫环常被用来讨论和...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用...

    java源码包4

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用...

    java练习实例 实训

    根据给定文件的信息,我们可以提炼出以下几个Java编程相关的知识点: ### 1. 水仙花数 **标题描述:** “水仙花数”是指一个三位数,其各位数字立方和等于该数本身。 **代码实现:** ```java public class ...

    test11.9_java_

    在这个问题中,参与者围成一圈,从1开始按顺序报数,每数到特定数值(在这个例子中是5)的人会被淘汰,直到只剩最后一个人为止。我们需要编写Java程序来模拟这个过程,并输出整个淘汰的过程。 在Java编程中,解决这...

    java上机java上机.doc

    实验指导4-3中的`Josephus.java`利用了循环来实现约瑟夫环问题。`arrayOfJosephus` 方法使用了一个do-while循环,遍历数组并根据设定的条件(每3个孩子出局)更新数组元素,模拟孩子们出局的过程。循环处理确保了...

    韩顺平java源码-DataStructJava:韩顺平JAVA数据结构与算法,重点是算法!

    list下有双向链表、单向循环链表约瑟夫问题、单向链表 queue queue下面有普通的队列(是很浪费空间并且有毛病的)、正常使用的队列 sparseArray sparseArray下面是稀疏数组转换和恢复的例子 stack stack里面是数组栈...

    数据结构与算法经典问题解析 java语言描述 原书第二版

    4. **动态数据结构**:如堆栈(后进先出,LIFO)和队列(先进先出,FIFO),以及队列的变种,如优先队列(优先堆)。 在算法方面,本书可能涉及以下内容: 1. **排序算法**:如冒泡排序、插入排序、选择排序、快速...

    约瑟夫斯问题GUI程序

    3. **图形库/框架**:开发者可能使用了如Java Swing、JavaFX、Python的Tkinter、Qt、wxPython等图形库或框架来构建GUI。 4. **约瑟夫斯问题算法**:该程序的核心是实现约瑟夫斯问题的算法。可能采用了数组、链表等...

    数据结构(Java版) 线性表的实现与应用完整版 (2).pdf

    实验中还给出了约瑟夫环问题的实现,这是一个经典的计算机科学问题,通过顺序表来模拟报数过程,找到按照特定规则出列的顺序。 接下来,实验的第二部分关注单链表的实现。单链表是一种动态数据结构,每个节点包含...

    yuesefuhuan.rar_M?n

    这个问题描述了一个经典的游戏或算法,通常被称为"约瑟夫环"(Josephus Problem),在这个游戏中,人们围成一个圈按顺序报数,每报到特定数值"M"的人会被淘汰出局,然后从下一个人重新开始报数,直到只剩一个人为止...

    面向对象程序设计实验-18计科3班-20181101047-范少帅-第2次1

    实验项目涵盖了实际编程中的一些常见任务,如计算阶乘、绘制图形、找最大公约数和最小公倍数等,这些都是锻炼编程思维和问题解决能力的好例子。在实现过程中,会涉及到嵌套循环的使用(如在绘制杨辉三角时),以及...

    数据结构课程设计--敢死队问题

    每次数到特定数值的人会被排除出圈,然后从下一个人继续报数,直到只剩下最后一个人为止。这个最后剩下的那个人被称为“敢死队队长”。问题的关键在于找到一种有效的方法来确定这个队长。 解决敢死队问题的四种常见...

    2014华为校园招聘上机题

    在这个例子中,n=5, k=2。 3. **验证括号是否匹配**:这是经典的栈应用问题,可以使用栈数据结构来检查括号是否正确配对。遇到左括号时入栈,遇到右括号时检查栈顶元素是否为相应的左括号,若是则弹出栈顶元素,...

    数据结构问题分析.docx

    在Java等编程语言中,ArrayList就是一个动态数组的例子。当数组满时,它会自动调整大小以适应更多的元素。然而,在C++等不提供内置动态数组的语言中,通常需要手动管理内存,例如通过指针和动态内存分配实现类似的...

Global site tag (gtag.js) - Google Analytics