UVa - 133 The Dole Queue
2017-04-05 21:47
441 查看
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 3
0 0 0
Sample output
␣␣4␣␣8,␣␣9␣␣5,␣␣3␣␣1,␣␣2␣␣6,␣10,␣␣7
最近刚学了c++中的vector容器,它是一个能够存放任意类型的动态数组,能够增加和压缩数据,所以用vector编这道题还不是很难。
解题的思想就是先把每个每个位置都赋值,然后出队的人将其位置的值改为0就好了。
编程初学者,代码写的有点乱。。。
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 3
0 0 0
Sample output
␣␣4␣␣8,␣␣9␣␣5,␣␣3␣␣1,␣␣2␣␣6,␣10,␣␣7
最近刚学了c++中的vector容器,它是一个能够存放任意类型的动态数组,能够增加和压缩数据,所以用vector编这道题还不是很难。
解题的思想就是先把每个每个位置都赋值,然后出队的人将其位置的值改为0就好了。
#include <iostream> #include <cstdio> #include <vector> using namespace std; int main(){ int n, m, k; int A, B; while(cin >> n >> k >> m){ if(n == 0 && m == 0 && k == 0) break; else{ int p1 = 1, p2 = n; int left = n; vector<int> a; vector<int>::iterator p; vector<int>::iterator p3; for(int i = 1; i <= n; i++){ a.push_back(i); } int aa, bb; p = a.begin(); p3 = a.end() - 1; int l = 5; while(left != 0){ int flagA = 0, flagB = 0; for(A = 1; ; A++, p++){ if(*p == 0) A--; if(A == k){ flagA = *p; break; } if(flagA == 0 && p == a.end() - 1){ p = a.begin() - 1; } if(p == a.end() - 1) break; } for(B = 1; ; B++, p3--){ if(*p3 == 0) B--; if(p == p3&&B == m){ flagB = *p3; *p3 = 0; left--; break; } else if(B == m){ flagB = *p3; *p = 0; *p3 = 0; left -= 2; break; } if(flagB == 0 && p3 == a.begin()){ p3 = a.end(); } if(p3 == a.begin()) break; } if(flagA == flagB){ printf("%3d", flagA); } else{ printf("%3d", flagA); printf("%3d", flagB); } if(left != 0) cout << ","; } } cout << endl; } }
编程初学者,代码写的有点乱。。。
相关文章推荐
- uva133-The Dole Queue
- uva 133 The Dole Queue(约瑟夫变形)
- UVA133 The Dole Queue
- UVa133 - The Dole Queue
- Uva 133:The Dole Queue
- The Dole Queue uva133
- 算法竞赛入门经典(第2版)救济金发放(The Dole Queue,UVa133)
- 救济金发放The Dole QueueUVA 133
- UVa 133 - The Dole Queue
- UVA133 The Dole Queue (模拟)
- The Dole Queue UVA - 133
- UVa 133 The Dole Queue
- UVa133 - The Dole Queue
- 救济金发放 (The Dole Queue UVa 133)
- uva 133 - The Dole Queue(救济金点人)
- UVa 133 The Dole Queue(救济金发放)
- uva 133 - The Dole Queue
- UVA【133】 The Dole Queue
- UVA 133 The Dole Queue
- UVA - 133 The Dole Queue