约瑟夫环问题

import  java.util.Scanner;
/**
*使用数组实现约瑟夫环问题
*由m个人围成一个首尾相连的圈报数。
*从第一个人开始,从1开始报数,报到n的人出圈,
*剩下的人继续从1开始报数,直到所有的人都出圈为止。
*对于给定的m和n,求出所有人的出圈顺序.
*/
public   class  RingTest{
    
public   static   void  main(String[] args){
        System.out.println(
" 程序说明如下: " );
        System.out.println(
" 由m个人围成一个首尾相连的圈报数。从第一个人开始,从1开始报数,报到n的人出圈,剩下的人继续从1开始报数,直到所有的人都出圈为止。对于给定的m和n,求出所有人的出圈顺序. " );
        
        
// 提示输入总人数
        System.out.println( " 请输入做这个游戏的总人数: " );
        Scanner sca
= new  Scanner(System.in);
        
int  m = sca.nextInt();
        
// 提示输入要出圈的数值
        System.out.println( " 请输入要出圈的数值: " );        
        
int  n = sca.nextInt();
        System.out.println(
" 按出圈的次序输出序号: " );        
        
// 创建有m个值的数组
         int [] a = new   int [m];
        
// 初始长度,以后出圈一个,长度就减一
         int  len = m;
        
// 给数组赋值
         for ( int  i = 0 ;i < a.length;i ++ )
            a[i]
= i + 1 ;
        
// i为元素下表,j代表当前要报的数
         int  i = 0 ;

        int j=1;

        while(len>0){

        if(a[i%m]>0){

        if(j%n==0){

        System.out.print(a[i%m]+"  ");

        a[i%m]=-1;

        j=1;

        i++;

       len--;

}else{

       i++;

       j++;

}

}else{

     i++

}

}

    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值