- 浏览: 347892 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
pacoson:
感谢楼主。请受小生一拜。
ANT预编译JSP -
zhuhongming123:
一楼的同学Lucene4.* 以上的 已经改成了Numeric ...
Lucene日期排序及组合查询 -
ywjk520:
RangeQuery在哪个包里?
Lucene日期排序及组合查询 -
willwen:
有个疑问,楼主,为何初始化bits 从txt读取已有的网址是直 ...
布隆过滤器(Bloom Filter)之java实例 -
yu_226528:
还不如没有呢
jFreeChart 在jsp页上实现简单的折线图、柱状图
约瑟夫出圈问题 两种方法实现,数据和链表 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);
- }
- }
- }
- public class Joseph {
- /**
- * 问题描述
- * 约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号
- * 开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1 开始报数。就这样,
- * 直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。
- * 输入数据
- * 每行是用空格分开的两个整数,第一个是 n ,第二个是 m ( 0 < m, n < 300),最后一行是:0 0
- * 输出要求
- * 对于每行输入数据(最后一行除外),输出数据也是一行,即最后猴王的编号
- * 输入样例:
- * 6 2
- * 12 4
- * 8 3
- * 0 0
- * 输出样例:
- * 5
- * 1
- * 7
- */
- public static void main(String[] args) {
- Scanner in =new Scanner(System.in);
- System.out.print("有几只猴子选大王?");
- int amount = in.nextInt();
- System.out.print("喊几的退出圈子?");
- int num = in.nextInt();
- // 定义"猴子圈"
- Set<Integer> monkeys = new TreeSet<Integer>();
- // 初始化"猴子圈",确定每只猴子的编号。
- for (int i = 1; i <= amount; i++) {
- monkeys.add(i);
- }
- // 初始化报的数为1
- int i = 1;
- // 开始报数! 每一轮报数,都接着上次报的数i进行,"猴子圈"只剩1只猴子了就停止报数
- while (monkeys.size() > 1) {
- // 定义猴子编号数组,用于迭代"猴子圈"
- Integer[] monkeyNums = monkeys.toArray(new Integer[0]);
- // 迭代"猴子圈",作为一轮报数
- for (int monkeyNum : monkeyNums) {
- if (i < num) {
- // 下只猴子要报的数
- i++;
- } else {
- // 如果这只猴子报的数是num,就把它移出"猴子圈"
- monkeys.remove(monkeyNum);
- // 下只猴子报数从1开始
- i = 1;
- }
- }
- }
- // "猴子圈"的最后一只猴子做大王。
- int king = 0;
- for (int monkeyNum : monkeys) {
- king = monkeyNum;
- }
- System.out.println("大王是" + king + "号猴子");
- }
- }
发表评论
-
int转byte[],byte[]转int
2009-10-10 14:51 1585public byte[] intToByte(int i) ... -
不使用任何循环和递归,输出打印n条(n>1) "Hello World"
2009-07-07 21:09 1049String str="Hello"; ... -
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。
2009-06-17 22:29 2468package test.money; import j ... -
求出现次数最多的那个字母及次数,如有多个重复的则都求出。〔金山公司面试题〕
2009-06-17 22:28 1571import java.util.ArrayList; ... -
一著名软件公司的java笔试算法题!
2009-06-17 22:21 1358原题如下:用1、2、2、3、4、5这六个数字,用java写一个 ... -
编程实现统计文本文件中某个单词的出现频率,并输出统计结果
2009-06-17 21:55 3156用HashMap来解决假设单词不存在跨行的,每个单词用,. ; ... -
创建一个静态方法,给它传入一个对象,请循环的打印出该对象所在类的类名和所实现的方法名(华为笔试)
2009-06-17 20:42 2041import java.lang.reflect.*; ... -
在ORACLE大数据量下的分页解决方法
2009-06-17 19:05 1649在ORACLE大数据量下的分页解决方法。 一般用截取ID方法 ... -
编写一个截取字符串的函数
2009-06-17 11:34 963编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出 ... -
用插入法进行排序
2009-06-17 10:34 1255import java.util.*; class I ... -
用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
2009-06-17 09:41 1200Server端程序: import java.net.*; ... -
java实现B树(二叉树)插入,删除
2009-06-17 07:50 2676B树(二叉搜索树)定义: 1)、每个非叶子节点至多有两个子节点 ... -
java读取(删除)文件夹下的所有文件夹和文件
2009-06-16 15:30 1778import java.io.FileNotFoundExce ... -
500人(小孩)围成一个圈,数到3的人下个人就从1开始数,问最后一个人的位置在那里?
2009-06-16 14:57 1816小孩玩游戏,手拉手围成 ... -
写一个java程序实现线程连接池的功能
2009-06-16 14:44 1210线程池: import java.util.lin ... -
用java写二叉树算法,实现添加数据形成二叉树功能,并打印
2009-06-16 14:27 876public class MyTest { private ...
相关推荐
从给定的文件信息来看,主要的信息点集中在标题和描述中,即“约瑟夫环实验报告”以及“用vc6.0环境实现的约瑟夫环的上机实验报告”。这部分信息涉及到计算机科学中的一个重要数据结构问题——约瑟夫环(Josephus ...
【约瑟夫环模拟器基于MFC的实现】 约瑟夫环问题,源自古罗马的一则历史传说,是一个经典的计算机科学问题,它涉及到循环链表和递归算法。在这个问题中,人们围成一个圈,从某个人开始按顺序报数,每次数到特定数字...
约瑟夫环问题,也称为约瑟夫环序列或约瑟夫问题,是一个著名的理论问题,源自古希腊的数学家约瑟夫·弗拉基米尔。这个问题的基本设定是:一个圆圈中的n个人按顺序编号,从第一个人开始报数,数到m的人将被剔除,然后...
### MATLAB 解决约瑟夫问题 #### 知识点概览 1. **约瑟夫问题定义与背景** 2. **约瑟夫问题的一般算法介绍** 3. **MATLAB编程实现约瑟夫问题** - 变量定义与初始化 - 循环结构的应用 - 条件判断语句 - 数组操作...
约瑟夫环(Josephus Problem)是一个经典的理论问题,它在数据结构和算法的教学中常被用作实例,来展示链表、队列、栈等数据结构的应用。这个实习报告将深入探讨这个问题,并通过源代码进行实际实现。 约瑟夫环问题...
约瑟夫环问题,也被称为约瑟夫环序列或约瑟夫问题,是一个著名的理论问题,源自古罗马的传说。该问题的基本设定是:一群囚犯围成一个圈,按照顺时针方向从某个人开始计数,每数到特定数值的人会被剔除出圈,然后从下...
约瑟夫环问题是一个经典的计算机科学问题,源自一个古老的故事。在这个问题中,人们围成一个圈,并按顺序编号。每次从某个特定编号的人开始,每隔一定数量的人就会被排除,直到只剩下最后一个人为止。这个问题通常...
用循环单向链表解决约瑟夫问题 原题: 设有n个人站成一圈,每个人持有一个密码(正整数)。现从第t个人开始,按顺时针方向“1,2,3,4,…”循环报数,数到m1(第t个人所持密码)的人出列,然后从出列者的下一个人重新...
约瑟夫生死游戏算法实现 数据结构中的约瑟夫生死游戏是一种经典的算法问题,旨在解决在某个圆环中,每个人的生死次序问题。该问题的解决方案主要基于单循环链表的数据结构和算法实现。 约瑟夫生死游戏的算法思想 ...
约瑟夫生死游戏,也被称为约瑟夫环问题(Josephus Problem),是计算机科学和算法设计中的一个经典问题。这个游戏源自一个古老的传说,涉及到在战争中被捕的士兵们站成一个圈,按照一定的规则每间隔一定人数淘汰一人...
"数据结构课程设计约瑟夫生死游戏" 本课程设计的标题是“数据结构课程设计约瑟夫生死游戏”,是数据结构课程设计的一部分,旨在训练学生的数据组织能力和提高程序设计能力。该设计的目的是学习数据结构课程,学会...
### 约瑟夫环(Josephus)问题详解与实现 #### 一、问题背景及定义 约瑟夫环问题源自古罗马时期的历史事件。据史学家约瑟夫记载,在公元66年至70年间,犹太人反抗罗马统治期间,约瑟夫和他的40名部下在裘达伯特城...
"约瑟夫环(链表实现)" 约瑟夫环是一种经典的算法问题,它的主要思想是使用链表来模拟一个环形结构,然后通过遍历这个环形结构来实现约瑟夫环的操作。下面我们将详细介绍约瑟夫环的链表实现。 首先,我们需要定义...
《约瑟夫问题详解及其在POJ中的应用》 约瑟夫问题,源自古罗马历史的一个有趣的故事,是由数学家约瑟夫·弗拉基米尔提出的。问题的基本设定是:一群人站成一个圆圈,从某人开始按顺时针方向计数,每数到特定数值的...
### 约瑟夫环(Josephus)问题详解 #### 一、问题背景与定义 约瑟夫环问题,又称为约瑟夫问题或者约瑟夫斯难题,源自古罗马历史学家弗拉维乌斯·约瑟夫斯的自传。在面对敌人的围攻时,约瑟夫斯和他的40名士兵退守...
《VC实现约瑟夫环:链式与顺序表解析》 约瑟夫环问题,源自古罗马的一个传说,是一个经典的计算机科学问题。在VC++环境下,我们可以通过编程来解决这个问题,既可以采用链式存储结构,也可以使用顺序存储结构。本...
根据给定的文件信息,我们可以总结出以下关于“约瑟夫环C++语言编程”的相关知识点: ### 一、约瑟夫环问题介绍 约瑟夫环(Josephus Problem)是一个经典的理论计算机科学问题,源自古罗马时期的数学家约瑟夫斯·...
### 约瑟夫环问题及其C语言实现 #### 一、约瑟夫环问题概述 约瑟夫环(Josephus Problem)是一个经典的数学问题,它涉及到一系列人在一个圈中根据特定规则依次“出列”的过程。具体描述如下: 1. **初始条件**:...
【约瑟夫环数据结构实验】是数据结构课程中一个经典的问题,主要涉及线性表的存储结构——单向循环链表。实验的目标是模拟约瑟夫环问题,即若干人围成一圈按顺时针方向报数,报到特定数字的人出列,然后下一轮重新...
约瑟夫环(Josephus Problem)是一个著名的理论问题,源于公元前一世纪的犹太历史学家约瑟夫·弗拉维乌斯所描述的故事。在该问题中,人们站成一个圈,从某个人开始计数,每数到特定数字的人会被排除出圈,然后继续从...