开发者社区> 问答> 正文

约瑟夫环问题用java怎么解决,有简单点的方法吗

一组人(n)个,围成一圈,从某人开始数到滴三个的人出列,在接着从下一个人开始数,最终输出最终出列的人(约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3,...,n)分别表示)围坐在一张圆桌周围。从编号k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,知道圆桌周围的人全都出列。

展开
收起
爵霸 2016-06-07 14:46:46 2372 0
1 条回答
写回答
取消 提交回答
  •  import java.util.Scanner;
    public class countMethod {
     public static void main(String[] args) {
      Scanner sc=new Scanner(System.in);
    
      //接收用户输入,获得总人数N
      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;
       //System.out.println(rs[i]);
      }
    
      int n=N;//剩余的人数
      int m=0;//报数的编号
    
    
    
      while(n>1){
       for(int j=0;j<N;j++){
        if(rs[j]){
         m++;
         if(m==M){
          m=0;
          rs[j]=false;
          n--;
          //System.out.println(rs[j]);
         }
    
        }
    
       }
    
      }
    
      //打印出最后留下来的人员的编号
      for(int k=0;k<N;k++){ 
       if(rs[k]){
        System.out.println("最后留下的是第"+(k+1)+"号。");
        break;
    
       }
      }
    
     }
    }
    2019-07-17 19:30:10
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载