本文共 661 字,大约阅读时间需要 2 分钟。
有n个人,报数m的人出列。输出这n个人的出队顺序
例如:
有8个人,初始序列为 1 2 3 4 5 6 7 8
当m=4时,出列顺序为:4 8 5 2 1 3 7 6
思路:
用一个数组p[ ],存放人的编号,将n个人的编号存到p[0]~p[n-1];
从编号为1,数组为p[0],数组下标为t=0开始循环报数,数到m的人(该人下标为t=(t+m-1)%i)出列,i为数组中剩下的人数。
例如:第一个出列的是4号,它在数组中的下标是3。(0+4-1)%8=3
输出p[t],并将它从数组中删除(即将后面的元素前移一个位置)因此,每次报数的起始位置就是上次报数的出列位置。反复执行直到出列n个人为止。
import java.util.Scanner;public class D_3_31_4 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int m=sc.nextInt(); int p[]=new int[n] ; for(int i=0;i=1;j--) { t=(t+m-1)%j; System.out.print(p[t]+" "); for(int k=t+1;k<=j-1;k++) { p[k-1]=p[k]; } } }}
转载地址:http://gcssi.baihongyu.com/