UVA 133
来源:互联网 发布:免费注册域名送空间 编辑:程序博客网 时间:2024/06/05 17:40
The Dole Queue
In a serious attempt to downsize (reduce) the dole queue, The New National Green Labour Rhinoceros Party has decided on the following strategy. Every day all dole applicants will be placed in a large circle, facing inwards. Someone is arbitrarily chosen as number 1, and the rest are numbered counter-clockwise up to N (who will be standing on 1's left). Starting from 1 and moving counter-clockwise, one labour official counts off k applicants, while another official starts from N and moves clockwise, counting m applicants. The two who are chosen are then sent off for retraining; if both officials pick the same person she (he) is sent off to become a politician. Each official then starts counting again at the next available person and the process continues until no-one is left. Note that the two victims (sorry, trainees) leave the ring simultaneously, so it is possible for one official to count a person already selected by the other official.
Input
Write a program that will successively read in (in that order) the three numbers (N, k and m; k, m > 0, 0 < N < 20) and determine the order in which the applicants are sent off for retraining. Each set of three numbers will be on a separate line and the end of data will be signalled by three zeroes (0 0 0).
Output
For each triplet, output a single line of numbers specifying the order in which people are chosen. Each number should be in a field of 3 characters. For pairs of numbers list the person chosen by the counter-clockwise official first. Separate successive pairs (or singletons) by commas (but there should not be a trailing comma).
Sample input
10 4 30 0 0
Sample output
4 8, 9 5, 3 1, 2 6, 10, 7
where represents a space.
/*
用链表做
*/
package one;
import java.util.Scanner;
/**
*
* @author Administrator
*/
public class a133_5 {
static Node1 Head1, Head2, p1, p2;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
Head1 = null;
Head2 = null;
int n = in.nextInt();
int a = in.nextInt();
int b = in.nextInt();
if (n == 0 && a == 0 && b == 0) {
break;
}
Creat_List(n);
Update_List(n, a, b);
}
}
static void Creat_List(int n) {
for (int i =1; i <= n; i++) {
p1 = new Node1();
if (i == 1) {
p1.date = i;
p2 = p1;
Head1 = p1;
} else {
p1.date = i;
p2.pNext1 = p1;
p1.pNext2 = p2;
p2 = p1;
}
p1.pNext1 = Head1;
Head1.pNext2 = p1;
Head2 = p1;
}
}
static void Update_List(int n, int a, int b) {
p1 = Head1;
p2 = Head2;
while (n != 0) {
for (int i = 1; i < a; i++) {
p1 = p1.pNext1;
}
for (int i = 1; i < b; i++) {
p2 = p2.pNext2;
}
if (p1.date == p2.date) {
System.out.printf("%3d", p2.date);
p1.pNext2.pNext1 = p1.pNext1;
p1.pNext1.pNext2 = p1.pNext2;
p1 = p1.pNext1;
p2 = p1.pNext2;
n -= 1;
} else {
System.out.printf("%3d%3d", p1.date, p2.date);
p1.pNext2.pNext1 = p1.pNext1;
p1.pNext1.pNext2 = p1.pNext2;
if (p2 == p1.pNext1) {
p1 = p1.pNext1.pNext1;
} else {
p1 = p1.pNext1;
}
p2.pNext2.pNext1 = p2.pNext1;
p2.pNext1.pNext2 = p2.pNext2;
p2 = p2.pNext2;
n -= 2;
}
if (n != 0) {
System.out.print(",");
}
}
System.out.println("");
}
}
class Node1 {
int date;
Node1 pNext1;
Node1 pNext2;
public Node1() {
}
}
- uva 133
- UVA 133
- UVA 133
- uva 133
- uva 133
- UVa 133
- uva 133
- uva 133
- uva 133
- UVA-133
- uva 133
- UVa: 133
- UVA 133
- UVA 133
- UVA 133
- UVA 133 救济金发放
- uva 133 救济金发放
- UVA 133 (13.07.07)
- 分析TCP/IP协议栈代码之UDP(STM32平台)
- java 加密技术
- Unix原理与应用(第四版)学习笔记1--理论篇
- 笑话一个
- 09-php文件下载
- UVA 133
- [leetcode刷题系列]Jump Game II
- HDU4447----Yuanfang, What Do You Think?----多项式的比较以及相除
- poj(1149)PIGS
- 数据库授权
- eclipse在异常关闭后,导致无法启动workspace问题的解决
- Pervasive产品及解决方案体验会
- xcode 自带svn提交新添加文件提示.h文件无法提交
- httpclient中文乱码问题