约瑟夫问题 java

约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列

知识补充:

List接口主要有两个实现类,ArrayList和LinkedList类。在List集合中允许出现重复的元素,与Set集合不同的是,List集合中的元素都是有序的,可以根据索引位置来检索List集合中的元素,第一个被添加进来的元素的索引为0,第二个为1,依次类推

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;                                     

public class Test{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入总人数:");
        int totalNum = scanner.nextInt();
        System.out.print("请输入报数的大小:");
        int cycleNum = scanner.nextInt();
        yuesefu(totalNum, cycleNum);
    }                                                         

   public static void yuesefu(int totalNum, int countNum) {
        // 初始化人数
        List<Integer> start = new ArrayList<Integer>();//创建List集合  ,且集合中存放的是整型  

      //正确的创建13个数的方法如下:

   // List<Integer> list=new ArrayList<Integer>(new Integer(13));
        for (int i = 1; i <= totalNum; i++) {
            start.add(i);  //像集合中添加元素
        }
        //从第K个开始计数
        int k = 0;
        while (start.size() >0) {
            k = k + countNum;
            //数到m的人的索引位置
            k = k % (start.size()) - 1;
//            System.out.println(start.size());
           // 判断是否到队尾
            if (k < 0) {
                System.out.println(start.get(start.size()-1));
                System.out.println(3333);
                start.remove(start.size() - 1);
                k = 0;
            } else {
                System.out.println(start.get(k));//通过索引获取所对应的值
                start.remove(k);   //删除指定位置的元素
            }
        }
    }
}                                                             
时间: 2024-10-13 16:23:19

约瑟夫问题 java的相关文章

约瑟夫环 java实现

问题: N个人从1到N编号,围城一圈,从1开始报数, 数到X时,将X的编号输出,并将那个人踢出, 下一个从1再开始报数,直到所有人都出去 思路: 就是计数,移除,没有太深的思想,直接上代码: package test; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * N个人从1到N编号,围城一圈, * 从1开始报数, 数到X时,将X的编号输出,并将那个人踢出, * 下一个从1再开

j使用数组实现约瑟夫环 java

我们首先来看一下约瑟夫环问题: 给定m个人,m个人围成一圈,在给定一个数n,从m个人中的第一个人每第n个人便将其除去,求被最后一个出去的人的编号. 思路: 建立一个长度为m+1的数组,将其的内容初始化为0至m 我们设置变量i与j,i代表数组元素的下表,因为我设置的数组长度为m+1,所以数组下标就为每个人的编号,当i==m的时候,我们将i置为0,让其从头开始便利. 变量j为判断当前元素是否为排列的第n个元素,如果是则将当前下标为i的元素的值置为0,不是的话,i++,j++,每当我们遍历到数值为0的

约瑟夫问题java实现

据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个 人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止.然而Josephus 和他的朋友并不想遵从.首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人.接着,再越过k-1个人,并杀掉第k个 人.这个过程沿着圆圈

约瑟夫环 java 对象数组实现

import java.util.Scanner; class Person{ String name; int seqno; Person(String _name, int _seqno){ name = _name; seqno = _seqno; } } public class JosephCircle { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanne

约瑟夫环问题-Java数组解决

约瑟夫环问题说的是,n个人围成一圈,从第k个人开始沿着一个方向报数,报到第m个人时,第m个人出列,从紧挨着的下一个人(未出列)开始,求整个环中人的出列顺序.下面是我用java实现的解决方法. 1 class JosephLoop 2 { //n为环中人数,m为每次报数的人数,k为报数的起始位置0-n 3 int n,m,k; 4 int[] persons; 5 int[] seq; 6 7 JosephLoop(int n, int k, int m){ 8 this.n = n; 9 thi

约瑟夫问题(java实现)

方法一.自定义的链表实现 package com.code.yuesefu; public class YueSeFuList { public static void main(String[] args) { int count = 41;//申请一个指定长度的链表 Node n = YueSeFuList.createNodes(count); for(int i=0;i<count;i++){ Node second = n.next;//第2个 n = n.next.next;//第3

约瑟夫环的java解决

总共3中解决方法,1.数学推导,2.使用ArrayList递归解决,3.使用首位相连的LinkedList解决 import java.util.ArrayList; /** * 约瑟夫环问题 * 需求:n个人围成一圈,从第一个人开始报数,数到K的人出局,然后从下一个人接着报数,直到最后一个人,求最后一个人的编号 * @author Miao * */public class Josephus { public static void main(String[] args) { int n =

约瑟夫问题的JAVA实现(借鉴别人的代码+自己分析理解)

http://www.blogjava.net/rorely/archive/2010/01/15/309732.html 原博客地址 import java.util.Scanner; /** *使用数组实现约瑟夫环问题 *由m个人围成一个首尾相连的圈报数. *从第一个人开始,从1开始报数,报到n的人出圈, *剩下的人继续从1开始报数,直到所有的人都出圈为止. *对于给定的m和n,求出所有人的出圈顺序. */ public class RingYuesefu{ public static vo

(java描述)关于链表的代码-----单双、循环链表、约瑟夫环、多项式相加

将链表头尾倒置 将几个链表合并成一个新的链表,将链表中重复的节点去掉,并按大小排序 双向循环链表 单向循环链表(约瑟夫循环) 多项式相加 程序源代码 单链表.单向循环链表结点类 package javab; public class Node { int data; Node next; public Node(int data){ this.data=data; } } 第一题代码: package javab; import java.util.Scanner; public class I