zoukankan      html  css  js  c++  java
  • UVa 133,发放救济金

    沿用前一个题的思路:

    用left记录剩下的点,直到全部选完。

    这里我的问题是,我一直pos = (pos + f + n)%n,这里的问题是对于B点来说,开始的位置是1,就成了(1+(-1) +n) %n 是0,位置是从1开始记录的,所以应该是(pos  + f + n - 1) %n + 1;

    #include <stdio.h>
    #define maxn 25
    
    int n,k,m;
    int a[maxn];
    
    int go (int pos ,int f,int t)
    {
        while(t--)
        {
            do {
                pos = (pos+f+n-1)%n+1;
            }while(a[pos]==0);
        }
        return pos;
    }
    
    int main()
    {
        while(scanf("%d%d%d",&n,&k,&m),n)
        {
            for(int i=1;i<=n;i++)
                a[i] = i;
    
            int pos1 = n;
            int pos2 = 1;
            int left = n;
            while(left)
            {
                pos1 = go(pos1,1,k);
                pos2 = go(pos2,-1,m);
    
                printf("%3d",pos1);
                a[pos1] = 0;
                left--;
                if(pos1!=pos2)
                {
                    printf("%3d",pos2);
                    a[pos2] = 0;
                    left --;
                }
                if(left) printf(",");
            }
            puts("");
        }
        return 0;
    }
  • 相关阅读:
    poj 2388
    BUAA 1489
    poj 2524
    poj 2109
    poj 2503 Babelfish
    poj All in All
    poj 1611 The Suspects
    poj 2299
    poj 1328
    hdu 1008 Elevator
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5843701.html
Copyright © 2011-2022 走看看