码迷,mamicode.com
首页 > 其他好文 > 详细

UVa 133 The Dole Queue

时间:2015-09-24 16:27:36      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

解题思路:约瑟夫环。具体见代码:

技术分享
 1 #include<cstdio>
 2 using namespace std;
 3 int n, k, m, vis[24];   //24,向科比致敬,像科比一样努力的活着。
 4 
 5 int go(int p, int d, int t)
 6 {
 7     while(t--)
 8     {
 9         do{
10             p = (p+d+n-1)%n + 1; //在纸上写写就知道
11         }while(vis[p]==0); //如果是0,则继续走,并且不计入步数。
12     }
13     return p; //返回走到的位置
14 }
15 
16 int main()
17 {
18     while(~scanf("%d%d%d", &n, &k, &m) && n)
19     {
20         for(int i = 1; i <= n; i++) vis[i] = i;//初始化
21         int left = n, p1 = n, p2 = 1; //这里的初始化要注意
22         while(left)
23         {
24             p1 = go(p1, 1, k); //1表示逆时针
25             p2 = go(p2, -1, m); //-1表示顺时针
26             printf("%3d", vis[p1]);
27             left --;
28             if(p2 != p1)   //如果不同才输出
29             {
30                 printf("%3d", vis[p2]);
31                 left --;
32             }
33             vis[p1] = vis[p2] = 0; //标记为0,表示已走过
34             if(left) printf(","); //最后一个没有标点
35         }
36         printf("\n");
37     }
38     return 0;
39 }
View Code

 

UVa 133 The Dole Queue

标签:

原文地址:http://www.cnblogs.com/loveprincess/p/4835328.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!