约瑟夫环问题--java
有编号从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相关推荐
- 【约瑟夫环】Java实现:100个人开始从1开始报数,每当报数到3,报数3的人离开,求最后留下来人的位置。
[约瑟夫环]Java实现:100个人开始从1开始报数,每当报数到3,报数3的人离开,求最后留下来人的位置. 原创 2017年03月15日 00:21:36 标签: 约瑟夫环问题 1023 问题背景:约 ...
- Java学习之约瑟夫环的两中处理方法
1 package day_2; 2 3 import java.util.Scanner; 4 5 /** 6 * @author Administrator 7 * 约瑟夫环问题: 设编号为 1, ...
- java约瑟夫环迭代器_Josephus约瑟夫环问题的不同实现方法与总结
/************************************************************************/ /* Josep ...
- 杀人游戏约瑟夫环(洛谷P1145题题解,Java语言描述)
题目要求 题目链接P1145 约瑟夫环问题了解一下 约瑟夫环问题其实在数据结构里与单循环链表关系密切,但是这里模拟就完事~~ 我写过的约瑟夫环问题 AC代码(Java语言描述) import java ...
- java实现简单的约瑟夫环问题
我自己学习数据结构的时候,总希望能找到很简单的入门代码,可总是很难找到,于是就想到能写一些简单的java代码. 在百度百科上面搜索到约瑟夫环的问题时,并没有发现java的简单实现,自己在下面弄也是弄 ...
- 用java解决约瑟夫循环问题,Java实现循环列表解决约瑟夫环问题
约瑟夫环:共有n个人围成一圈,从1开始报数,数到m的人出圈,求最后幸运者序号?? 下面用Java实现循环列表解决这个问题: package com.iteye.ljmdbc7a; import jav ...
- 烽火算法题 报数问题(不是约瑟夫环)双向链表 Java实现与C实现
报数问题 报数问题 解答 1.题目要求 2.解题思路 3.代码实现 3.1 java版本 3.2 c版本 4.问题总结 报数问题 时间限制:3000MS 内存限制:589824KB 题目描述: 当n个 ...
- java实现环形链表解决约瑟夫环问题
什么是环形链表? 环形链表就是单向链表的基础上让链表的首尾相连,形成一个环,这就是一个循环链表. 什么是约瑟夫环问题? 约瑟夫环如下: 约瑟夫问题是个著名的问题:N个人围成一圈,第一个人从1开始报数, ...
- java实现约瑟夫环完整算法_Java简单实现约瑟夫环算法示例
Java简单实现约瑟夫环算法示例 发布时间:2020-10-01 14:19:56 来源:脚本之家 阅读:104 作者:perfect亮 本文实例讲述了Java简单实现约瑟夫环算法.分享给大家供大家参 ...
最新文章
- 互联网人才流向说明了什么
- SP2010开发和VS2010专家食谱--第六章节--Web Services和REST(5)--Inserting new contacts through REST...
- 操作系统课设之基于信号量机制的并发程序设计
- 如何在Eclipse 3.3上安装jadclipse[java的反编译工具] 收藏
- svm gui安装 matlab,svm_matlab_gui 支持向量机matlab工具箱(含资料及gui模式)用于分类和回归预测 - 下载 - 搜珍网...
- [转]php返回json数据中文显示的问题
- 牛客网–华为机试在线训练6:质数因子
- python读取excel_Python简单读取Excel示例
- “快易需求”第一次迭代总结
- QQ登录界面测试用例设计:
- 计算机鼠标右键的主要应用是什么原因,win7电脑桌面鼠标右键功能和作用|win7 64位桌面右键没反应,反应非常慢...
- [Python爬虫] 简单网络爬虫抓取博客文章及思想介绍
- flappy bird用java实现_java实现Flappy Bird游戏源代码
- js undefined和null区别
- 磁盘管理器中不显示新增的硬盘
- NTLite精简Windows 10 Enterprise LTSC 2019 (1809) x64 - Client 10.0.17763.316
- USACO 2.1.3 Ordered Fractions
- 平行泊车系统路径规划(5)
- 2021年最新邓白氏码申请D-U-N-S
- 算法学习 (门徒计划)3-2 哈希表与布隆过滤器及经典问题 学习笔记