科技网站新版网站上线,vfp wordpress,公司网站制作注意什么,商标被注册了做网站n(n20)个人站成一圈#xff0c;逆时针编号为1#xff5e;n。有两个官员#xff0c;A从1开始逆时针数#xff0c;B从n开始顺时针数。在每一轮中#xff0c;官员A数k个就停下来#xff0c;官员B数m个就停下来#xff08;注意有可能两个官员停在同一个人上#xff09;…n(n20)个人站成一圈逆时针编号为1n。有两个官员A从1开始逆时针数B从n开始顺时针数。在每一轮中官员A数k个就停下来官员B数m个就停下来注意有可能两个官员停在同一个人上。接下来被官员选中的人1个或者2个离开队伍。输入nkm输出每轮里被选中的人的编号如果有两个人先输出被A选中的。例如n10k4m3输出为4 8, 9 5, 3 1, 2 6, 10, 7。注意输出的每个数应当恰好占3列。
样例 输入
10 4 3输出 4 8,9 5,3 1,2 6,10,7,【分析】 仍然采用自顶向下的方法编写程序。用一个大小为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;}
}