首页 > 其他 > 详细

UVa 133 The Dole Queue

时间:2015-09-24 16:26:51      阅读:156      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!