import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true) {
int n=sc.nextInt();
int k=sc.nextInt();
int m=sc.nextInt();
if((n*n+k*k+m*m)==0)break;//全0结束
int[] a=new int[n];//存放1~n个人
for (int i = 0; i < a.length; i++) {//初始化a数组
a[i]=i+1;
}
int[] b=new int[n];//b[i]=0表示还在队伍中,b[i]=1表示离开队伍
int start_A=0;//A官员的起始位置
int start_B=n-1;//B官员的起始位置
int count=n;//还有几个人没被选中
while(count>0) {//还有人在队伍里就继续
int chose_A=0;//A官员选择的人
int chose_B=0;//B官员选择的人
int num=0;//计数,官员数过的人数
//A官员先开始
for (int i = start_A; ; i++) {//i表示A官员数过的人
if(b[i%n]==0) {
num++;
}
if(num==k) {//数到第K个停下
chose_A=i%n;
start_A=chose_A+1;
break;
}
}
//B官员接着来
num=0;//重置计数器
for (int i = start_B; ; i--) {//i表示A官员数过的人
i=i+n;//防止下标越界,对取模无影响
if(b[(i+n)%n]==0) {
num++;
}
if(num==m) {
chose_B=(i+n)%n;
start_B=chose_B-1;
break;
}
}
if(chose_A==chose_B) {//同一个人就输出一次
b[chose_A]=1;//离开队伍的位置置为1
System.out.printf("%3d",a[chose_A]);
count--;
}else {//不是同一个人
b[chose_A]=1;//离开队伍的位置置为1
b[chose_B]=1;//离开队伍的位置置为1
System.out.printf("%3d%3d",a[chose_A],a[chose_B]);
count-=2;
}
if(count!=0) {
System.out.print(",");
}else {
System.out.println();
}
}
}
}
}
UVA 133 java
最新推荐文章于 2025-05-28 11:28:37 发布