zoukankan      html  css  js  c++  java
  • UVa133

    题目描述

    20201228182547

    代码

    #include<stdio.h>
    #define maxn 25
    int n, k, m, a[maxn]; // n 是人数,官员 A 从 1 开始逆时针数数,数 k 个然后停下来,官员 B 从 n 开始数数,数 m 个停下来
    
    // 逆时针走 t 步,步长是 d (-1 表示顺时针走),返回新位置,从 p 出发
    int go(int p, int d, int t)
    {
        while (t--)
        {
            do {
                p = (p - 1 + d + n) % n + 1; // 这里是先将 <1 到 n> 映射到 <0 到 n - 1>,加 n 是为了处理步长为负的情况
            } while (a[p] == 0); // 走到下一个非 0 数字
        }
        return p;
    }
    
    int main()
    {
        while (scanf("%d%d%d", &n, &k, &m) == 3 && n)
        {
            for (int i = 1; i <= n; i++)
                a[i] = i; // 给人员编号
            int left = n; // 剩余人数
            int p1 = n, p2 = 1; // A 从 1 开始,逆时针点数,所以初始值取 n,那么下一个数就是 1,B 从 n 开始,顺时针点数,初始值为 1,下一个数就是 n
            while (left)
            {
                p1 = go(p1, 1, k); // 逆时针走 k 步
                p2 = go(p2, -1, m); // 顺时针走 m 步
                printf("%3d", p1);
                left--;
                if (p2 != p1) // 如果 p2 不等于 p1
                {
                    printf("%3d", p2);
                    left--;
                }
                a[p1] = a[p2] = 0; // 用过的位置就归零
                if (left)
                    printf(",");
            }
            printf("
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    软件工程系统开发课堂测试01
    java--printf
    java--局部类只能访问外包方法的final局部成员
    java--内部类实现“类的多重继承”
    java--内部类
    【转】java--final
    java--实例成员 & 静态成员
    java--方法和成员的继承,访问
    Java--格式化输出
    HDOJ 1005
  • 原文地址:https://www.cnblogs.com/fanlumaster/p/14202969.html
Copyright © 2011-2022 走看看