zoukankan      html  css  js  c++  java
  • UVa 133 The Dole Queue

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

     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("
    ");
    37     }
    38     return 0;
    39 }
    View Code
  • 相关阅读:
    Redis
    Ajax和JSON
    快速幂
    欧拉函数
    约数
    质数
    二分图相关算法模板
    最小生成树模板
    最短路算法模板
    康托展开和逆康托展开
  • 原文地址:https://www.cnblogs.com/loveprincess/p/4835328.html
Copyright © 2011-2022 走看看