题目1188:约瑟夫环

来源:互联网 发布:js中new date 的参数 编辑:程序博客网 时间:2024/04/30 06:54

题目1188:约瑟夫环

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:2340

解决:989

题目描述:

    N个人围成一圈顺序编号,从1号开始按1、2、3......顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。
    请按退出顺序输出每个退出人的原序号。

输入:

包括一个整数N(1<=N<=3000)及一个整数p。

输出:

测试数据可能有多组,对于每一组数据,
按退出顺序输出每个退出人的原序号。

样例输入:
7 3
样例输出:
3 6 2 7 5 1 4

import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.StringTokenizer;public class Main {    public static void main(String[] args) {    new Task().solve() ;  }}class Task{InputReader in = new InputReader(System.in) ;PrintWriter out = new PrintWriter(System.out) ;class Node{int val ;Node next ;Node(int val){this.val = val ;next = null ;}}Node build(int n){Node head = new Node(1) ;Node now = head ; for(int i = 2 ; i <= n ; i++){Node node = new Node(i) ;now.next = node ;now = now.next ;}now.next = head ;return head ;}Node remove(Node head , int k , List<Integer>res){Node now = head ;Node pre = now ;for(int i = 2 ; i <= k ; i++){pre = now ;now = now.next ;}res.add(now.val) ;pre.next = now.next ;return now.next ;}void solve(){while(in.hasNext()){int n = in.nextInt() ;int k = in.nextInt() ;Node node = build(n) ;List<Integer> res = new ArrayList<Integer>() ;for(int i = 0 ; i < n ; i++){node = remove(node, k , res) ;}for(int i = 0 ; i < n ; i++){out.print((i > 0 ? " " : "") + res.get(i)) ;}out.println();out.flush();}out.flush();}}class InputReader {      public BufferedReader reader;      public StringTokenizer tokenizer;        public InputReader(InputStream stream) {          reader = new BufferedReader(new InputStreamReader(stream), 32768);          tokenizer = new StringTokenizer("");      }        private void eat(String s) {          tokenizer = new StringTokenizer(s);      }        public String nextLine() {          try {              return reader.readLine();          } catch (Exception e) {              return null;          }      }        public boolean hasNext() {          while (!tokenizer.hasMoreTokens()) {              String s = nextLine();              if (s == null)                  return false;              eat(s);          }          return true;      }        public String next() {          hasNext();          return tokenizer.nextToken();      }        public int nextInt() {          return Integer.parseInt(next());      }        public long nextLong() {          return Long.parseLong(next());      }        public double nextDouble() {          return Double.parseDouble(next());      }        public BigInteger nextBigInteger() {          return new BigInteger(next());      }    }  



0 0
原创粉丝点击