A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梦开始的地方 中级黑马   /  2015-1-17 23:28  /  1325 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /**约瑟夫问题:一共N个人围一圈报数,数到M的那个人出圈,直到最后一个人,他们出圈的顺序是怎样的。

  2. */
  3. public class LuckNumberTest1{

  4.         public static void getList(int arr[],int digital){

  5.                 int i=0;
  6.                 int num=1;//从1开始报数
  7.                 int n=0;//记录出圈人的个数
  8.                 for(;i<arr.length && n<arr.length;i++){
  9.                                
  10.                         if(arr[i]!=-1){//当前这个人是否被标记过,没有则参与报数(数增加)

  11.                                 if(num%digital==0){//把那个数到3的人标记,之后不参与报数

  12.                                         System.out.print(arr[i]+",");
  13.                                         arr[i]=-1;
  14.                                         n++;
  15.                                 }//
  16.                                 num++;
  17.                         }

  18.                         if (i==arr.length-1)//转到末尾那个人,进行第二圈
  19.                                 i=-1;
  20.                 }
  21.         }

  22.         public static void main(String[] args){
  23.                
  24.                 //int[] a={1,2,3,4,5,6,7,8,9,10,11,12,13};//13个人围成一圈
  25.                 int[] a=new int[]{1,2,3,4,5,6,7,8};

  26.                 for(int i=0;i<a.length;i++){
  27.                         a[i]=i+1;
  28.                 }
  29.                 getList(a,3);//数到3的人自动退出
  30.         }       
  31.        
  32. }
复制代码




5 个回复

倒序浏览
java中解决约瑟夫环的话 ,用集合框架什么的吧可能好一点吧,List可以直接remove(m),控制好移除的索引,很简单了。
使用数组这样的数学方法,总忘了到末尾怎么办,学习啦~~{:2_39:}
回复 使用道具 举报
vermouth 发表于 2015-1-18 12:45
java中解决约瑟夫环的话 ,用集合框架什么的吧可能好一点吧,List可以直接remove(m),控制好移除的索引,很 ...

嗯,你说的那些我会好好去学点,谢谢指点!
回复 使用道具 举报
现在对这个还不是太熟悉
回复 使用道具 举报
我一开始也是想到的用boolean[]数组来做,后来想到用list,感觉好方便
回复 使用道具 举报
学习了!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马