• 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;
    }
  • 相关阅读:
    Ceph相关
    Redis学习
    docker mysql
    WebSocket学习与使用
    nginx学习与使用
    python学习小记
    基数计数——HyperLogLog
    Swagger使用小记
    理解Java枚举类型
    Jenkins使用
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5843701.html
Copyright © 2020-2023  润新知