约瑟夫出圈问题 两种方法实现,数据和链表 n个人围成一个圈,一个个首尾相连的圈报数,从第一个开始报数
报到m的人出圈,剩下的人继续从1开始报数,直到所有人都出圈为止。
import java.util.LinkedList;
import java.util.Scanner;
/**
* 约瑟夫出圈问题 两种方法实现,数据和链表 n个人围成一个圈,一个个首尾相连的圈报数,从第一个开始报数
* 报到m的人出圈,剩下的人继续从1开始报数,直到所有人都出圈为止。
*
* @author sesame.yangj
*/
public class Joseph {
/**
* @param args
*/
public static void main(String[] args) {
Joseph j = new Joseph();
System.out.println("约瑟夫出圈");
System.out.println("输入人数:");
Scanner s = new Scanner(System.in);
int n = s.nextInt();
System.out.println("输入出圈的位置:");
int m = s.nextInt();
System.out.println("数组实现");
j.arrayJoseph(n, m);
System.out.println("链表实现");
j.listJoseph(n, m);
}
/**
* 用数组实现
*
* @param n 总的人数
* @param m 当前报的数
*/
public void arrayJoseph(int n, int m) {
//数组存储编号
int array[] = new int[n];
int len = n;
for (int i = 0; i < array.length; i++) {
array[i] = i + 1;
}
int i = 0;
//当前报的数
int j = 1;
while (len > 0) {
if (array[i % n] > 0) {
//位置有人
if (j % m == 0) {
//报到出圈的人
System.out.println(array[i % n]);
//为之置空
array[i % n] = -1;
//从1开始报数
j = 1;
i++;
len--;
} else {
i++;
j++;
}
} else {
//遇到空位
i++;
}
}
}
/**
* 用双向链表实现
*
* @param n
* @param m
*/
public void listJoseph(int n, int m) {
LinkedList<Integer> list = new LinkedList<Integer>();
for (int i = 0; i < n; i++) {
//添加数据,与编号对应
list.add(i + 1);
}
int moved = 0;
while (list.size() > 0) {
moved = (moved + m - 1) % list.size();
System.out.println(list.get(moved));
list.remove(moved);
}
}
}
分享到:
相关推荐
从给定的文件信息来看,主要的信息点集中在标题和描述中,即“约瑟夫环实验报告”以及“用vc6.0环境实现的约瑟夫环的上机实验报告”。这部分信息涉及到计算机科学中的一个重要数据结构问题——约瑟夫环(Josephus ...
【约瑟夫环模拟器基于MFC的实现】 约瑟夫环问题,源自古罗马的一则历史传说,是一个经典的计算机科学问题,它涉及到循环链表和递归算法。在这个问题中,人们围成一个圈,从某个人开始按顺序报数,每次数到特定数字...
约瑟夫环问题,也称为约瑟夫环序列或约瑟夫问题,是一个著名的理论问题,源自古希腊的数学家约瑟夫·弗拉基米尔。这个问题的基本设定是:一个圆圈中的n个人按顺序编号,从第一个人开始报数,数到m的人将被剔除,然后...
### MATLAB 解决约瑟夫问题 #### 知识点概览 1. **约瑟夫问题定义与背景** 2. **约瑟夫问题的一般算法介绍** 3. **MATLAB编程实现约瑟夫问题** - 变量定义与初始化 - 循环结构的应用 - 条件判断语句 - 数组操作...
约瑟夫环(Josephus Problem)是一个经典的理论问题,它在数据结构和算法的教学中常被用作实例,来展示链表、队列、栈等数据结构的应用。这个实习报告将深入探讨这个问题,并通过源代码进行实际实现。 约瑟夫环问题...
《约瑟夫环MFC窗体版:深入理解与实现》 约瑟夫环问题,又称约瑟夫环算法(Josephus Problem),是计算机科学中一个经典的理论问题,源自一个古老的传说。这个问题在不同的编程环境中都有所应用,尤其是在数据结构...
约瑟夫环问题,也被称为约瑟夫环序列或约瑟夫问题,是一个著名的理论问题,源自古罗马的传说。该问题的基本设定是:一群囚犯围成一个圈,按照顺时针方向从某个人开始计数,每数到特定数值的人会被剔除出圈,然后从下...
约瑟夫环问题是一个经典的计算机科学问题,源自一个古老的故事。在这个问题中,人们围成一个圈,并按顺序编号。每次从某个特定编号的人开始,每隔一定数量的人就会被排除,直到只剩下最后一个人为止。这个问题通常...
用循环单向链表解决约瑟夫问题 原题: 设有n个人站成一圈,每个人持有一个密码(正整数)。现从第t个人开始,按顺时针方向“1,2,3,4,…”循环报数,数到m1(第t个人所持密码)的人出列,然后从出列者的下一个人重新...
约瑟夫生死游戏算法实现 数据结构中的约瑟夫生死游戏是一种经典的算法问题,旨在解决在某个圆环中,每个人的生死次序问题。该问题的解决方案主要基于单循环链表的数据结构和算法实现。 约瑟夫生死游戏的算法思想 ...
约瑟夫生死游戏,也被称为约瑟夫环问题(Josephus Problem),是计算机科学和算法设计中的一个经典问题。这个游戏源自一个古老的传说,涉及到在战争中被捕的士兵们站成一个圈,按照一定的规则每间隔一定人数淘汰一人...
"数据结构课程设计约瑟夫生死游戏" 本课程设计的标题是“数据结构课程设计约瑟夫生死游戏”,是数据结构课程设计的一部分,旨在训练学生的数据组织能力和提高程序设计能力。该设计的目的是学习数据结构课程,学会...
### 约瑟夫环(Josephus)问题详解与实现 #### 一、问题背景及定义 约瑟夫环问题源自古罗马时期的历史事件。据史学家约瑟夫记载,在公元66年至70年间,犹太人反抗罗马统治期间,约瑟夫和他的40名部下在裘达伯特城...
"约瑟夫环(链表实现)" 约瑟夫环是一种经典的算法问题,它的主要思想是使用链表来模拟一个环形结构,然后通过遍历这个环形结构来实现约瑟夫环的操作。下面我们将详细介绍约瑟夫环的链表实现。 首先,我们需要定义...
《约瑟夫问题详解及其在POJ中的应用》 约瑟夫问题,源自古罗马历史的一个有趣的故事,是由数学家约瑟夫·弗拉基米尔提出的。问题的基本设定是:一群人站成一个圆圈,从某人开始按顺时针方向计数,每数到特定数值的...
《VC实现约瑟夫环:链式与顺序表解析》 约瑟夫环问题,源自古罗马的一个传说,是一个经典的计算机科学问题。在VC++环境下,我们可以通过编程来解决这个问题,既可以采用链式存储结构,也可以使用顺序存储结构。本...
根据给定的文件信息,我们可以总结出以下关于“约瑟夫环C++语言编程”的相关知识点: ### 一、约瑟夫环问题介绍 约瑟夫环(Josephus Problem)是一个经典的理论计算机科学问题,源自古罗马时期的数学家约瑟夫斯·...
### 约瑟夫环问题及其C语言实现 #### 一、约瑟夫环问题概述 约瑟夫环(Josephus Problem)是一个经典的数学问题,它涉及到一系列人在一个圈中根据特定规则依次“出列”的过程。具体描述如下: 1. **初始条件**:...
【约瑟夫环数据结构实验】是数据结构课程中一个经典的问题,主要涉及线性表的存储结构——单向循环链表。实验的目标是模拟约瑟夫环问题,即若干人围成一圈按顺时针方向报数,报到特定数字的人出列,然后下一轮重新...
约瑟夫环(Josephus Problem)是一个著名的理论问题,源于公元前一世纪的犹太历史学家约瑟夫·弗拉维乌斯所描述的故事。在该问题中,人们站成一个圈,从某个人开始计数,每数到特定数字的人会被排除出圈,然后继续从...