有编号从1到N的N个人坐成一圈报数,报到M的人出局,下一位再从1开始,
 如此持续,直止剩下一位为止,报告此人的编号X。输入N,M,求出X。

那么问题就是,对于n个人,最后剩下的是谁呢?
对于5个人的情况是这样地:
1,2,3,4,5
依此杀掉2,4,1,5
最后剩下的是3

本题参考了zcsunt的程序

/*
 * @(#)Josephus.java
 *
 *
 * @author chenyi
 */
import java.lang.*;
import java.io.*;

class Node
{
     int _data;
     Node _next;
    //------------------------------
    public Node(int d){
        _data = d;
    }

public int data(){
        return _data;
    }
}

class CirLinkList
{
     Node _cur;
    int _size = 0;

public CirLinkList(int n){
        Node tail = new Node(n);
        _cur = tail;  
        for(int i=n-1; i>0; i--){
            Node tmp = new Node(i);
            tmp._next = _cur;
            _cur = tmp;
        }
        tail._next = _cur;
        _size += n;
    }

public int size(){
        return _size;
    }

public void step(int n){
        for(int i=0; i<n; i++){
            _cur = _cur._next;
        }    
    }

public Node delete(){
        Node temp = _cur._next;
        _cur._next = temp._next;
        _size--;
        return temp;
    }

public void display(){
        Node start = _cur, end = _cur;
        while(end._next != start){
            System.out.print(end._data + " ");
            end = end._next;
        }
        System.out.println(end._data );
    }
}

public class Josephus {

public static void main(String[] args) throws IOException {
        
        System.out.print("Please input the amount of people:");
        String str = getString();
        Integer n = Integer.parseInt(str);
        CirLinkList L = new CirLinkList(n);
        
        System.out.print("Please input starting point:");
        String start_position = getString();
        Integer start = Integer.parseInt(start_position);
        L.step(start-1);
        
        System.out.print("Please input step length:");
        String step_length = getString();
        Integer stp = Integer.parseInt(step_length);
        
        while( L.size()>1 ){
            L.step(stp-2);
            Node death = L.delete();
            L.step(1);
            System.out.println("Now No. " + death.data() + "person leaves");
        }
        //System.out.println("");
        System.out.print("The survival is:");
        L.display();
    }
    //---------------------------------------------
    public static String getString() throws IOException{
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);
        String s = br.readLine();
        return s;
    }
}

约瑟夫环问题--java相关推荐

  1. 【约瑟夫环】Java实现:100个人开始从1开始报数,每当报数到3,报数3的人离开,求最后留下来人的位置。

    [约瑟夫环]Java实现:100个人开始从1开始报数,每当报数到3,报数3的人离开,求最后留下来人的位置. 原创 2017年03月15日 00:21:36 标签: 约瑟夫环问题 1023 问题背景:约 ...

  2. Java学习之约瑟夫环的两中处理方法

    1 package day_2; 2 3 import java.util.Scanner; 4 5 /** 6 * @author Administrator 7 * 约瑟夫环问题: 设编号为 1, ...

  3. java约瑟夫环迭代器_Josephus约瑟夫环问题的不同实现方法与总结

    /************************************************************************/ /*                  Josep ...

  4. 杀人游戏约瑟夫环(洛谷P1145题题解,Java语言描述)

    题目要求 题目链接P1145 约瑟夫环问题了解一下 约瑟夫环问题其实在数据结构里与单循环链表关系密切,但是这里模拟就完事~~ 我写过的约瑟夫环问题 AC代码(Java语言描述) import java ...

  5. java实现简单的约瑟夫环问题

    我自己学习数据结构的时候,总希望能找到很简单的入门代码,可总是很难找到,于是就想到能写一些简单的java代码.  在百度百科上面搜索到约瑟夫环的问题时,并没有发现java的简单实现,自己在下面弄也是弄 ...

  6. 用java解决约瑟夫循环问题,Java实现循环列表解决约瑟夫环问题

    约瑟夫环:共有n个人围成一圈,从1开始报数,数到m的人出圈,求最后幸运者序号?? 下面用Java实现循环列表解决这个问题: package com.iteye.ljmdbc7a; import jav ...

  7. 烽火算法题 报数问题(不是约瑟夫环)双向链表 Java实现与C实现

    报数问题 报数问题 解答 1.题目要求 2.解题思路 3.代码实现 3.1 java版本 3.2 c版本 4.问题总结 报数问题 时间限制:3000MS 内存限制:589824KB 题目描述: 当n个 ...

  8. java实现环形链表解决约瑟夫环问题

    什么是环形链表? 环形链表就是单向链表的基础上让链表的首尾相连,形成一个环,这就是一个循环链表. 什么是约瑟夫环问题? 约瑟夫环如下: 约瑟夫问题是个著名的问题:N个人围成一圈,第一个人从1开始报数, ...

  9. java实现约瑟夫环完整算法_Java简单实现约瑟夫环算法示例

    Java简单实现约瑟夫环算法示例 发布时间:2020-10-01 14:19:56 来源:脚本之家 阅读:104 作者:perfect亮 本文实例讲述了Java简单实现约瑟夫环算法.分享给大家供大家参 ...

最新文章

  1. 互联网人才流向说明了什么
  2. SP2010开发和VS2010专家食谱--第六章节--Web Services和REST(5)--Inserting new contacts through REST...
  3. 操作系统课设之基于信号量机制的并发程序设计
  4. 如何在Eclipse 3.3上安装jadclipse[java的反编译工具] 收藏
  5. svm gui安装 matlab,svm_matlab_gui 支持向量机matlab工具箱(含资料及gui模式)用于分类和回归预测 - 下载 - 搜珍网...
  6. [转]php返回json数据中文显示的问题
  7. 牛客网–华为机试在线训练6:质数因子
  8. python读取excel_Python简单读取Excel示例
  9. “快易需求”第一次迭代总结
  10. QQ登录界面测试用例设计:
  11. 计算机鼠标右键的主要应用是什么原因,win7电脑桌面鼠标右键功能和作用|win7 64位桌面右键没反应,反应非常慢...
  12. [Python爬虫] 简单网络爬虫抓取博客文章及思想介绍
  13. flappy bird用java实现_java实现Flappy Bird游戏源代码
  14. js undefined和null区别
  15. 磁盘管理器中不显示新增的硬盘
  16. NTLite精简Windows 10 Enterprise LTSC 2019 (1809) x64 - Client 10.0.17763.316
  17. USACO 2.1.3 Ordered Fractions
  18. 平行泊车系统路径规划(5)
  19. 2021年最新邓白氏码申请D-U-N-S
  20. 算法学习 (门徒计划)3-2 哈希表与布隆过滤器及经典问题 学习笔记

热门文章

  1. 求极限中比较常见的等价无穷小的记忆
  2. P2P平台:第三方支付不等于第三方资金托管
  3. luogu 2822 组合数问题
  4. java开发edusoho,开发 · EduSoho开发指南
  5. 空气质量在线检测系统制作 之Smart Airbox 制作流程
  6. char* buf和char buf[64],定义两种字符串作为参数传递给函数的区别
  7. 如果不让别人ping通自己的计算机。
  8. 漏洞修复之 bash漏洞远程命令执行
  9. 亚洲护照实力进一步加强
  10. html c 标签 if 判断是否为空