首页 > 代码库 > java中约瑟夫环代码实现

java中约瑟夫环代码实现

问题原型:

    传说在很久很久以前,有一架搭载着n个人的飞机出现了故障,迫降在了一个荒岛上。飞机彻底报废后,这些人用飞机的残骸建成了一艘只能容纳一个人乘坐的小船,那么怎么去确定这n个人中哪个人有资格上船呢?于是,这n个人采用了下面的方式来解决这个困境。

 

问题描述:

假设有N个人围成一圈,每个人都有从1到N的唯一顺序编号。接下来从编号为1的人开始顺序报数。报到M号的人退出这个圈。然后由下一个人重新由1开始进行报数,如此循环往复,那么最终留下来的是编号为多少的那个人呢?

 

import  java.util.Scanner;

public class Out{

    public static void main(String args[])

     {

       Out out=new Out();

     //接收用户输入,获得出列人员的编号N

  Scanner sc=new Scanner(System.in);

      System.out.println("请输入参与人数总数:");

     int N=   sc.nextInt();

 

   //接收用户输入,获得出列人员的编号M

     System.out.println("请输入出列人编号:");

      int M=sc.nextInt();

 

      //建立布尔型的数组,长度为总人数

      Boolean rs[]=new Boolean[N];

    //初始化布尔型数组,初始值均为true

   for(int i=0;i<N;i++){

        rs[i]=true;

        }

     int n=N;//剩余的人数

     int m=0;//报数的编号

      out.save();

    //打印出最后留下来的人员的编号

    for(int k=0;k<N;k++){

     if(rs[k]){

     System.out.println("剩余的人为第"+(k+1)+"个人");

    break;

   }

}

 }

  public void save (){

  while (n>1)

     for(int j=0;j<N;j++){

       if(r[j]) {

        m++;

        if( m==M){

          m=0;

         rs[j]=false;

        n--;

        }

   }

}

 

}

java中约瑟夫环代码实现