首页 > 代码库 > Uva133 - The Dole Queue

Uva133 - The Dole Queue

题意

n个人围城一个环,逆时针编号1~n,A从1开始逆时针数K个,B从n顺时针数M个,被选中的1或2个人一次领救济金,输出顺序

思路

双向约瑟夫环,公式没推出来,用的模拟

总结

开始用的数组模拟链表写的,WA了,打算再改改。不知道为什么这道题卡了很久总不对。

模拟:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6 const int maxn = 25;
 7 int n, k, m;
 8 int a[maxn];
 9 int main()
10 {
11     //freopen("in.txt", "r", stdin);
12 
13     while(cin >> n >> k >> m && n){
14         for(int i = 1; i <= n; i++)
15             a[i] = i;
16         int left = n;
17         int p1 = 1, p2 = n;
18         while(left){
19             int cnt = 0;
20             for(; cnt != k;p1++){
21                 if(p1 == n+1) p1 = 1;
22                 if(a[p1]) cnt++;
23 
24             }
25             p1--;
26             for(cnt = 0; cnt != m; p2--){
27                 if(p2 == 0) p2 = n;
28                 if(a[p2]) cnt++;
29 
30             }
31             p2++;
32             printf("%3d", p1);
33             left--;
34             if(p2 != p1){
35                 printf("%3d", p2);
36                 left--;
37             }
38             a[p1] = a[p2] = 0;
39             if(left) printf(",");
40         }
41         printf("\n");
42     }
43     return 0;
44 }

 

Uva133 - The Dole Queue