• 救济金发放(The Dole Queue, UVa 133)rust解法


    n(n<20)个人站成一圈,逆时针编号为1~n。有两个官员,A从1开始逆时针数,B从n开始顺时针数。在每一轮中,官员A数k个就停下来,官员B数m个就停下来(注意有可能两个官员停在同一个人上)。接下来被官员选中的人(1个或者2个)离开队伍。输入n,k,m输出每轮里被选中的人的编号(如果有两个人,先输出被A选中的)。例如,n=10,k=4,m=3,输出为4 8, 9 5, 3 1, 2 6, 10, 7。注意:输出的每个数应当恰好占3列。

    样例:
    输入

    10 4 3
    
    • 1

    输出

      4  8,
      9  5,
      3  1,
      2  6,
     10,
      7,
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    【分析】
    仍然采用自顶向下的方法编写程序。用一个大小为0的数组表示人站成的圈。为了避免人走之后移动数组元素,用0表示离开队伍的人,数数时跳过即可。主程序如下

    use std::io;
    
    fn main() {
        let mut buf = String::new();
        io::stdin().read_line(&mut buf).unwrap();
        let mut it = buf.split_whitespace();
        let n: usize = it.next().unwrap().parse().unwrap();
        let k: usize = it.next().unwrap().parse().unwrap();
        let m: usize = it.next().unwrap().parse().unwrap();
        //println!("{} {} {}", n, k, m);
        let mut v: Vec<_> = (1..=n).collect();
        //println!("{:?}", v);
        let mut left = n;
        let mut p1 = n - 1;
        let mut p2 = 0;
        while left > 0 {
            let mut k = k;
            let mut m = m;
            while k > 0 {
                p1 = (p1 + 1) % n;
                if v[p1] != 0 {
                    k -= 1;
                }
            }
            while m > 0 {
                p2 = (p2 + n - 1) % n;
                if v[p2] != 0 {
                    m -= 1;
                }
            }
            print!("{:3}", v[p1]);
            left -= 1;
            if p1 != p2 {
                print!("{:3}", v[p2]);
                left -= 1;
            }
            println!(",");
            v[p1] = 0;
            v[p2] = 0;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
  • 相关阅读:
    Java 类之 java.lang.reflect.Method
    PyOpenGL笔记
    React TypeScript | 快速了解 antd 的使用
    webpack使用详解
    Vue框架总结(三、Vue组件化以及CLI编程)
    嵌入式基础
    论文 | REACT: SYNERGIZING REASONING AND ACTING INLANGUAGE MODELS
    量子计算领域,亚马逊在如何“摆兵布阵”?
    Jeff Dean:机器学习在硬件设计中的潜力
    MySQL 存储过程和函数
  • 原文地址:https://blog.csdn.net/inxunxun/article/details/133869745