《数据结构与算法分析-java语言描述》- 练习3.6 “死亡轮盘” Josephus问题
发布日期:2021-06-30 16:57:25
浏览次数:2
分类:技术文章
本文共 1762 字,大约阅读时间需要 5 分钟。
文章目录
实例说明
运行时间O(N min(M, N))
Josephus问题(Josephus problem)是下面的游戏:- N \color{#00ff11}{N} N个人编号 从 1 到 N \color{#001111}{从1到N} 从1到N,围坐成一个圈。
- 号码1的人有一个“土豆”,向后传递“土豆”。
- 经过 M \color{#005ff5}{M} M次传递后,手拿“土豆”的人被清理出场。
- “土豆”交给下一个人,继续往后传递 M \color{#005ff5}{M} M次。
- 一直重复,直到剩下最后一个。
- 最后剩下的人获得胜利。
e.g.
M=0 N=5 5号胜利 M=1 N=5 被清除的顺序2 4 1 5 ,3号胜利问题:N个人,M次传递后,谁会胜利
实例代码
/** * Josephus问题 * “死亡轮盘” */ @Test public void testChapter3_6() { //N>=2 //人数 int N = 5 ; //传几次才杀人 int M = 1 ; /* * 创建N个人,环 */ Nodefirst = new Node (1, null); Node last ; Node currentNode = first; //开始创建2号 int number = 2; while(true) { //连接N号之后,N号连接first退出 if(number>N) { last = currentNode; currentNode.next = first; break; } Node insNext = new Node (number, null); //连接下一个 currentNode.next = insNext; //下一个 currentNode = currentNode.next; number ++ ; } /* * 检查 */ System.out.print("围坐情况:"); currentNode = first ; for(int i=0 ; i<= N ; i++) { System.out.print(currentNode.elementDate+", "); currentNode = currentNode.next; } /* * 开始M循环 */ currentNode = first ; Node previousNode = last ; int index = 0 ; while(true) { if(previousNode == currentNode) { //跳出的条件 break; } //处决 if(index == M) { //前一个 previousNode.next = currentNode.next; //重新计数 index = 0 ; }else { //处决计数 index ++ ; //更新上位置 previousNode = currentNode; } //当前位置往后移 currentNode = currentNode.next ; } System.out.println("\r\n"+M+"步杀一人"); System.out.print("死剩种:"+currentNode.elementDate+"号"); }
Node类代码
private static class Node{ private Node next ; private T elementDate ; public Node(T e , Node nex) { this.elementDate = e ; this.next = nex; } }
测试
转载地址:https://lawsssscat.blog.csdn.net/article/details/103001802 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月07日 10时16分27秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
HDOJ2049 不容易系列之(4)——考新郎
2019-04-30
CodeForces 248B - Chilly Willy - 找规律
2019-04-30
POJ-2418 Hardwood Species(Trie树)(map)
2019-04-30
HDU-4300 Clairewd’s message + 4333(扩展KMP)
2019-04-30
HDU 1592 Half of and a Half(高精度)
2019-04-30
POJ-3304 Segments(计算几何)
2019-04-30
UVA-11538 Chess Queen(数学)
2019-04-30
UVA-11401 Triangle Counting(数学优化)
2019-04-30
Codeforces Round #369 (Div. 2)
2019-04-30
UVA 11426 GCD - Extreme (II)(欧拉函数)
2019-04-30
HDU-2838 Cow Sorting(树状数组)
2019-04-30
POJ-2299 Ultra-QuickSort(树状数组)(离散化)
2019-04-30
基于SSM的兼职论坛系统的设计与实现
2019-04-30
基于java的图书管理系统的设计与实现
2019-04-30
基于java的SSM框架理财管理系统的设计与实现
2019-04-30
基于java的ssm框架就业信息管理系统的设计
2019-04-30
基于java的ssm框架的旅游网站设计与实现
2019-04-30
基于java的SSM框架的流浪猫救助网站的设计与实现
2019-04-30