循环队列 解Josephus环 游戏
来源:互联网 发布:程序员客栈怎么接单 编辑:程序博客网 时间:2024/05/23 12:18
孩提时的你是否玩过“烫手山芋”游戏:一群小孩围成一圈,有一个刚出锅的山芋在他们之间传递。其中一个孩子负责数数,每数一次,拿着山芋的孩子就把山芋转交给右边的邻居。一旦数到个特定的数,拿着山芋的孩子就必须退出,然后重新数数。如此不断,最后剩下的那个孩子就是
幸运者。通常,数数的规则总是从 1 开始,数到 k 时让拿着山芋的孩子出列,然后重新从 1 开始。 Josephus问题可以表述为: n 个孩子玩这个游戏,最后的幸运者是谁?
幸运者。通常,数数的规则总是从 1 开始,数到 k 时让拿着山芋的孩子出列,然后重新从 1 开始。 Josephus问题可以表述为: n 个孩子玩这个游戏,最后的幸运者是谁?
为了解答这个问题,我们可以利用队列结构来表示围成一圈的n个孩子。一开始,假定对应于队列首节点的那个孩子拿着山芋。然后,按照游戏的规则,把“土豆”向后传递到第k个孩子(交替进行k次dequeue()和k次enqueue()操作),并让她出队( dequeue())。如此不断迭代,直到队长( getSize())为 1 。
* Josephus环 游戏 */public class Josephus { public static Object josephus(Queue<String> q, int k) { if(q.isEmpty()) return null; while (q.size() > 1) { System.out.println(q.toString()); for (int i = 0; i < k; i++) { q.add(q.poll()); } String e=q.poll();//数到第K个数的人退出 System.out.println("\n\t" + e + "退出"); } return q.poll(); } public static Queue<String> build(String arr[]) { Queue<String> q = new LinkedList<>(); Collections.addAll(q, arr); return q; } public static void main(String[] args) { String[] kid = {"Alice", "Bob", "Cindy", "Doug", "Ed", "Fred", "Gene", "Hope", "Irene", "Jack", "Kim", "Lance", "Mike", "Nancy", "Ollie"}; System.out.println("最终的幸运者是" + josephus(build(kid), 5)); }}
0 0
- 循环队列 解Josephus环 游戏
- 循环队列+卡片游戏
- java利用队列模拟Josephus环
- 循环链表解决Josephus环问题
- 循环链表应用------Josephus环问题
- 卡片游戏2-循环队列
- 卡片游戏--循环队列实现
- 循环链表解决Josephus环轮流报数问题
- Josephus约瑟夫环问题循环链表实现
- Josephus(约瑟夫环问题)循环单链表c语句实现!
- 约瑟夫环问题(Josephus) —— 循环单链表
- Josephus 环
- Josephus环
- Josephus环
- Josephus环
- Josephus环
- Josephus环
- 队列用例:Josephus问题
- 心,在青春尽头绽放时
- 我与《散文网》
- USACO A Rectangular Barn 解题报告
- 的是个发的是规范的各犯嘀咕
- 放不下广发华福农发行然后被他人都会突然很软弱
- 循环队列 解Josephus环 游戏
- (一)线程管理_7---处理线程不受控制的异常
- [Tech Note] Delete files with long path
- WhatsApp Kik iMessage 微信
- 你是谁啊!
- Delphi编程---可以进行四则运算的Tcalc类源代码
- 南邮数据结构实验2 (1)二叉树基本操作
- 的复合风管法规变化非官方
- ubuntu12.04修改grub中内核显示顺序