有n个人围成一圈。顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子。问最后留下的是原来第几号的那位。

解决方案 »

  1.   

    import java.util.Scanner;
    public class PrintNumber {

    int m;//代表报数报到m时,此数出列
    int n;//代表总共有n个人

    public PrintNumber(){//构造方法,初始化m,n
    Scanner in=new Scanner(System.in);//从控制台接收参数
    System.out.print("请输入n个人:");
    n=in.nextInt();
    System.out.println("请输入m值:");
    m=in.nextInt();
    System.out.println();
    }

    public void printNumber(){//报数函数
    int[] person=new int[n];
    for(int i=0;i<n;i++)
    person[i]=1;
    //初始化person数组,数组值都为1。      当值为1时,代表有人占在,为0时代表无人占在
    int k=0;//数组下标
    int count=0;//代表报数的顺序
    for(int i=0;i<n;i++){//报数的人数,代表循环的次数
    for(int j=0;j<m;){//报3的循环
    if(person[k%n]!=0)
    j++;
    k++;
    }
    count++;
    person[(k-1)%n]=0;//报3了后k++了,所以指针减1
    System.out.println("第"+count+"报"+m+"的数为:"+((k-1)%n+1));
    }

    } /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    PrintNumber p=new PrintNumber();
    p.printNumber();
    }}