List实现队列--杀人游戏
View Code View Code View Code
发布日期:2021-05-09 09:33:48
浏览次数:28
分类:博客文章
本文共 2532 字,大约阅读时间需要 8 分钟。
使用list集合实现一个队列
package queue;/* * @auther 顶风少年 * @mail dfsn19970313@foxmail.com * @date 2020-01-09 09:42 * @notify * @version 1.0 */import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Queue{ private ArrayList queue = new ArrayList (); //从队列尾部添加元素 public void add(T... ts) { List ts1 = Arrays.asList(ts); queue.addAll(ts1); } //从队列头部删除一个元素 public T del() { if (queue.isEmpty()) { return (T) "-1"; } T remove = queue.remove(0); return remove; } //返回头部的元素,不是删除 public T head() { if (queue.isEmpty()) { return (T) "-1"; } return queue.get(0); } //返回队列的大小 public int size() { return queue.size(); } //清空队列 public void clear() { queue.clear(); } //判断队列是否为空 public boolean isEmpty() { return queue.isEmpty(); } //返回队列尾部元素 public T tail() { if (queue.isEmpty()) { return (T) "-1"; } return queue.get(queue.size() - 1); }}
/* * 约瑟夫问题是个有名的问题: * N个人围成一圈,从第一个开始报数,第M个将被杀掉, * 最后剩下一个,其余人都将被杀掉。例如N=6,M=5, * 被杀掉的顺序是:5,4,6,2,3,1。 * 思路:做一个计数器,计数器起步为1,被杀者从1开始喊,前4个人 * 1 2 3 4 不会被杀,但是当第N个人喊完数后,还要从第一个开始喊, * 所以我们将没有被杀的依次从队列的头部删除,添加到队列尾部,并将计数器+1。形成 * 一个圆环,当计数器喊道5,则表示有人要被杀,此时将计数器归为1.直到队列中只剩下 * 一个人。 * */
@Test public void t1() { Queue queue = new Queue(); queue.add(1, 2, 3, 4, 5, 6); int index = 1; while (queue.size() != 1) { if (index == 5) { Object del = queue.del(); index = 1; System.out.println(del); } else { Object del = queue.del(); queue.add(del); index += +1; } } System.out.println("幸运儿:" + queue.head()); }
/*菲波那切数列 * 1 1 2 3 5 8 13 21 34 55 * 从第三个数开始,当前数是前两个数相加的值。 * 1 1 2 * 1 2 3 * 2 3 5 * 3 5 8 * 。。。 * 思路:计算第10项则需要累加10次。前两个 1 1 占两项。 * 循环条件为当前项小于总项数 * 每次循环将队列头部元素移除,将移除的元素和当前队列头部元素相加 * 即为下一项的值。1 1 将1移除和1相加为2 将2添加队列。 * 1 2 将1移除和2相加为3,将3添加队列尾部。循环结束队列中有两个数字 * 队列尾部的则为计算后的值 * */
@Test public void t2() { int item = 10; int index = 2; Queuequeue = new Queue<>(); queue.add(1, 1); while (index < item) { Integer del = queue.del(); queue.add(queue.head() + del); index += 1; } System.out.println(queue.tail()); }
转载地址:https://www.cnblogs.com/zumengjie/p/12171930.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年08月23日 21时01分08秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
BESTCODER ROUND92 1001.Skip the Class
2019-05-24
POJ 1163 The Triangle【DP】递归和递推
2019-05-24
AOJ 497 最长递增子序列 【DP】
2019-05-24
POJ 1458 Common Subsequence
2019-05-24
POJ 1661 Help Jimmy
2019-05-24
POJ 1088 滑雪
2019-05-24
POJ 3624 Charm Bracelet (01背包)
2019-05-24
百练OJ 2755 神奇的口袋(递归+递推)
2019-05-24
HDU 1003 Max Sum
2019-05-24
Code Vs 1014 装箱
2019-05-24
循环队列,队链的实现
2019-05-24
HDU 2602 Bone Collector (01背包)
2019-05-24
POJ 1837 Blance (01背包)
2019-05-24
HDU 2456 饭卡 (01背包)
2019-05-24
HDU 1559 最大子矩阵
2019-05-24
Open Judge 4010 :2011
2019-05-24
百练OJ-2815 城堡问题【DFS】
2019-05-24
CODE[VS] 1025 选菜 【背包】
2019-05-24
CodeForce 89A.Robbery
2019-05-24
最大子段和【DP】
2019-05-24