UVA - 133 The Dole Queue

来源:互联网 发布:进销存软件免费版 编辑:程序博客网 时间:2024/06/05 04:47

UVA - 133 The Dole Queue

题目大意:n个人逆时针编号围成一个圈,两个考官一个从1逆时针点人,每次点k个,另一个从n顺时针点人,每次点m个,当被点到的人不同时输出 a b,同一个人时输出 a,每个数字占三个场宽。
解题思路:用数组模拟 定义两个变量标记数的位置,输完输出来就可以了,值得注意的,已经被点到的人是跳过 不用数的

/*************************************************************************    > File Name: UVA-133.cpp    > Author: Robin    > Mail: 499549060@qq.com     > Created Time: 2016年07月21日 星期四 10时24分43秒 ************************************************************************/#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#include<cstring>using namespace std;int main() {    int n[30];    int k, m, N;    int a,b;    while (scanf("%d%d%d", &N, &k, &m) && (N || k || m)) {        int flag = N;        memset(n, 0, sizeof(n));        a = 0;        b = N + 1;        while (1) {            for (int i = 0; i < k; i++) {                a++;                if (a == N + 1) a = 1;                while (n[a]){                    a++;                    if (a == N + 1) a = 1;                }            }            for (int i = 0; i < m; i++) {                b--;                if (b == 0) b = N;                while (n[b]){                    b--;                    if (b == 0) b = N;                }            }            printf("%3d", a);            flag--;            n[a] = 1;            if ( a != b) {                printf("%3d", b);                n[b] = 1;                flag--;            }            if (flag == 0) break;            printf(",");        }        printf("\n");    }}
0 0