UVA133 The Dole Queue (模拟)

来源:互联网 发布:淘宝气值是什么意思 编辑:程序博客网 时间:2024/06/14 15:43

题目描述:
这里写图片描述


分析:
初始时用一个数组来表示人员的编号,如果一个人被选中,则用0来表示。模拟一下即可。

代码如下:

#include<cstdio>using namespace std;const int maxn = 20+5;int N, k, m;int a[maxn];/*移动函数,以k作为标记表示顺时针还是逆时针*/int move(int p, int k, int t){    while(t--)    {        do{            p = (p+k+N-1) % N + 1;//注意因为是圈需要循环,所以要取余,有因为不是从0开始,所以要先减1,取余后加一        }while(a[p] == 0);//走到下一个非0数字    }    return p;}int main(){    while(scanf("%d%d%d",&N, &k, &m)!=EOF)    {        if(N==0) break;         for(int i=1; i<=N; i++)        {            a[i] = i;        }         int left = N;//还剩下的人数        int p1 = N, p2 = 1; //这里p1初始化为N,是因为要算上1        while(left)        {            p1 = move(p1, 1, k);            p2 = move(p2, -1, m);            printf("%3d", p1);            left--;             if(p1 != p2)            {                printf("%3d", p2);                left--;            }            a[p1] = a[p2] = 0;            if(left)            printf(",");        }        printf("\n");    }    return 0;   }
原创粉丝点击