- 浏览: 340014 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
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 1559public byte[] intToByte(int i) ... -
不使用任何循环和递归,输出打印n条(n>1) "Hello World"
2009-07-07 21:09 1017String str="Hello"; ... -
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。
2009-06-17 22:29 2396package test.money; import j ... -
求出现次数最多的那个字母及次数,如有多个重复的则都求出。〔金山公司面试题〕
2009-06-17 22:28 1538import java.util.ArrayList; ... -
一著名软件公司的java笔试算法题!
2009-06-17 22:21 1308原题如下:用1、2、2、3、4、5这六个数字,用java写一个 ... -
编程实现统计文本文件中某个单词的出现频率,并输出统计结果
2009-06-17 21:55 3121用HashMap来解决假设单词不存在跨行的,每个单词用,. ; ... -
创建一个静态方法,给它传入一个对象,请循环的打印出该对象所在类的类名和所实现的方法名(华为笔试)
2009-06-17 20:42 2019import java.lang.reflect.*; ... -
在ORACLE大数据量下的分页解决方法
2009-06-17 19:05 1628在ORACLE大数据量下的分页解决方法。 一般用截取ID方法 ... -
编写一个截取字符串的函数
2009-06-17 11:34 941编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出 ... -
用插入法进行排序
2009-06-17 10:34 1228import java.util.*; class I ... -
用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
2009-06-17 09:41 1174Server端程序: import java.net.*; ... -
java实现B树(二叉树)插入,删除
2009-06-17 07:50 2649B树(二叉搜索树)定义: 1)、每个非叶子节点至多有两个子节点 ... -
java读取(删除)文件夹下的所有文件夹和文件
2009-06-16 15:30 1746import java.io.FileNotFoundExce ... -
500人(小孩)围成一个圈,数到3的人下个人就从1开始数,问最后一个人的位置在那里?
2009-06-16 14:57 1778小孩玩游戏,手拉手围成 ... -
写一个java程序实现线程连接池的功能
2009-06-16 14:44 1189线程池: import java.util.lin ... -
用java写二叉树算法,实现添加数据形成二叉树功能,并打印
2009-06-16 14:27 844public class MyTest { private ...
相关推荐
用循环单向链表解决约瑟夫问题 原题: 设有n个人站成一圈,每个人持有一个密码(正整数)。现从第t个人开始,按顺时针方向“1,2,3,4,…”循环报数,数到m1(第t个人所持密码)的人出列,然后从出列者的下一个人重新...
约瑟夫环(Josephus)问题是由古罗马的史学家约瑟夫(Josephus)提出的,他参加并记录了公元66—70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名死硬的...
约瑟夫环~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
java实现约瑟夫环问题Josephus 约瑟夫问题 * 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k(1,2,3...n)的人开始报数,数到m(1,2,3...)的那个人出列; * 他的下一个人又从1开始报数,...
约瑟夫环c单链表问题描述:约瑟夫问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数...
约瑟夫环(Joseph)问题的一种描述是:编号为1、2、3……n的n个人按照顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按照顺时针的方向自1开始顺序报数,...
本程序主要是以建立单循环链表的形式,利用单向循环链表存储结构模拟此过程,建立起一个约瑟夫环,然后根据之前创立的结点,输入结点里的一些数据,程序有主函数开始,首先,提示输入创建约瑟夫环环数以及每个环上所...
用单链表解决约瑟夫环问题,数据结构实验报告。约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人...
问题描述:约瑟夫生者死者游戏:30个旅客同乘一条船,因为严重超载,非常危险,大家一致同意将一半的旅客投入海中。30个旅客围成一圈,由第一个人开始,依次报数,数到第9人,便把他投入大海中,然后从他的下一个...
8. 【题目】约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到k的那个人出列;他的下一个人又从1开始报数,数到k的那个人又...
约瑟夫(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人可有代表本人的序号。一开始任选一个正整数m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,从...
单链表解决约瑟夫环问题
循环队列和约瑟夫环问题 循环队列是一种特殊的队列结构,它的特点是队列的末尾元素连接着队列的开头元素,形成一个环形结构。这种数据结构可以用来解决约瑟夫环问题。 约瑟夫环问题是一个经典的问题,它是由古罗马...
约瑟夫(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止...
已知n个人(不妨分别以编号1,2,3,…,n 代表 )围坐在一张圆桌周围,首先从编号为 k 的人从1开始顺时针报数,1, 2, 3, ...,记下顺时针数到 m 的那个人,同时从编号为 k ...数据结构中经典的双向约瑟夫问题c语言代码
简单的约瑟夫环代码约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。 分析: (1)由于对于每个...
约瑟夫环代码约瑟夫环代码约瑟夫环代码约瑟夫环代码约瑟夫环代码约瑟夫环代码
采用单向环表实现约瑟夫环。请按以下要求编程实现:①从键盘输入整数m,通过create函数生成一个具有m个结点的单向环表。环表中的结点编号依次为1,2,……,m。②从键盘输入整数s(1<=s<=m)和n,从环表的第s...
约瑟夫环问题(数据结构C语言) 约瑟夫环问题是一种常见的数据结构问题,通过链表实现约瑟夫环的构建和遍历。在该问题中,我们需要构建一个链表,然后根据输入的报数上限值,输出约瑟夫环的结果。 链表的构建 在...
约瑟夫问题: 这是 17 世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事: 15 个教徒和 15 个 非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个 办 法: 30 个人围成一...