-
题目描述:
-
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.IOException;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.Queue;
import java.util.LinkedList;
class Main
{
public static final boolean DEBUG = false;
public static void main(String[] args) throws IOException
{
Scanner cin;
int n, p;
if (DEBUG) {
cin = new Scanner(new FileReader("d:\\OJ\\uva_in.txt"));
} else {
cin = new Scanner(new InputStreamReader(System.in));
}
while (cin.hasNext()) {
n = cin.nextInt();
p = cin.nextInt();
Queue<Integer> q = new LinkedList<Integer>();
for (int i = 1; i <= n; i++) q.add(i);
int i = 0;
boolean first = true;
while (!q.isEmpty()) {
int tmp = q.poll();
i++;
if (i == p) {
if (first) first = false;
else System.out.print(" ");
System.out.print(tmp);
i = 0;
}
else q.add(tmp);
}
System.out.println();
}
}
}