poj3750约瑟夫环,循环队列
2015-12-08 09:15
351 查看
Description
有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。
Input
第一行输入小孩的人数N(N<=64)
接下来每行输入一个小孩的名字(人名不超过15个字符)
最后一行输入W,S (W < N),用逗号”,”间隔
Output
按人名输出小孩按顺序出列的顺序,每行输出一个人名
Sample Input
5
Xiaoming
Xiaohua
Xiaowang
Zhangsan
Lisi
2,3
Sample Output
Zhangsan
Xiaohua
Xiaoming
Xiaowang
Lisi
有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。
Input
第一行输入小孩的人数N(N<=64)
接下来每行输入一个小孩的名字(人名不超过15个字符)
最后一行输入W,S (W < N),用逗号”,”间隔
Output
按人名输出小孩按顺序出列的顺序,每行输出一个人名
Sample Input
5
Xiaoming
Xiaohua
Xiaowang
Zhangsan
Lisi
2,3
Sample Output
Zhangsan
Xiaohua
Xiaoming
Xiaowang
Lisi
import java.io.BufferedInputStream; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner( new BufferedInputStream(System.in) ) ; PrintWriter cout = new PrintWriter(System.out) ; List<String> answer = new Solve(cin.nextInt() , cin).todo() ; for(String name : answer){ cout.println(name) ; } cout.flush() ; cout.close() ; } } class Node{ String name ; Node pre , next ; Node(){ pre = next = null ; } } class Solve{ Node head ; int w , s ; public Solve(int n , Scanner cin) { make(n) ; Node now = head ; for(int i = 1 ; i <= n ; i++){ now.name = cin.next() ; now = now.next ; } String[] p = cin.next().split(",") ; w = Integer.parseInt(p[0]) ; s = Integer.parseInt(p[1]) ; } void make(int n){ head = new Node() ; Node now = head ; for(int i = 1 ; i < n ; i++){ now.next = new Node() ; now.next.pre = now ; now = now.next ; } now.next = head ; head.pre = now ; } Node move(Node now , int step){ for(int i = 1 ; i <= step ; i++) now = now.next ; return now ; } Node delete(Node now){ now.next.pre = now.pre ; now.pre.next = now.next ; return now.next ; } List<String> todo(){ List<String> answer = new ArrayList<String>() ; Node now = move(head , w-1) ; while(now.next != now){ now = move(now, s-1) ; answer.add(now.name) ; now = delete(now) ; } answer.add(now.name) ; return answer ; } }
相关文章推荐
- 1059. Prime Factors (25)【素数】——PAT (Advanced Level) Practise
- file_get_contents与curl的区别
- 人工智能:第十一章 自然语言理解
- MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
- 17款最佳代码省查工具
- Android 编译系统
- 人工智能:第十章 机器视觉
- JFlow手机端开发说明与案例
- 解决64位进程调用32位库文件报错问题
- HTML5定稿一周年,你必须要重新认识HTML5了
- 人工智能:第八章 自动规划
- 二、SQL语句映射文件(1)resultMap
- 最全Pycharm教程(10)——Pycharm调试器总篇
- 第8章3节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge
- 人工智能:第九章 Agent (艾真体)
- 人工智能:第七章 机器学习
- 第8章2节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-解析处理命令行参数
- Android平台Camera实时滤镜实现方法探讨(七)--滤镜基本制作方法(一)
- 用textView实现跑马灯效果
- 二叉树求高度、叶子节点个数、总节点个数