有个幼儿园有500名儿童,从1开始编号,现在他们数数,从1开始数到3,数3的退出,求最后一个的儿童是多少号?
今天考试的题目,怎么也想不起来了,我记得好像见过~~~~~~~~

解决方案 »

  1.   

    添加到搜藏 | 快速回复  贴吧投诉   
      
    南京北大青鸟java培训 24小.. 
    北大青鸟秉承“教育改变生活”的理念!以学员优质就业为目标.入学即..
    www.js-btesting.com 
    北大青鸟(南京普雷)java培训.. 
    北大青鸟集团是北京大学四大校办产业支柱之一.7年运营,已培训近万..
    www.pledu.com 
    无锡北大青鸟java培训 专业.. 
    无锡北大青鸟java培训课程,高薪聘请名师讲解,小班教学,带薪实习,本..
    www.wxaccp.com 
    徐州北大青鸟java培训 
    徐州北大青鸟java培训,首选中博!TEL:0516-85629999.淮海区首家北大..
    www.zbaccp.com 
    北大青鸟java培训 
    北大青鸟java培训.北大青鸟ACCP课程会帮助您!凭借自身优良的教学与..
    www.njxt.cn 
    苏州三香路北大青鸟 培养了5.. 
    北大青鸟(苏州java培训)培训中心,多年来致力于培养JAVA软件工程师...
    www.sz-accp.com.cn 
     
    约瑟夫问题!  
     import java.util.*; 
    public class Yuesefu { 
    public static void main(String[] args) { 
    LinkedList a1=new LinkedList();//a1实现的是队列的功能 
    Integer i1=null; 
    for(int i=1;i<=30;i++){ 
    a1.add(new Integer(i));//将1到30追加到LinkedLise中 

    for(int k=0;k<15;k++){//从1开始记数,第9个数字被删除,一共删除15个数字 
        for(int j=1;j<9;j++){ 
        i1=(Integer)a1.poll(); 
        a1.offer(i1); 
        } 
        a1.poll(); 

        for(int l=0;l<15;l++){ 
         System.out.println("教徒排在"+a1.poll().toString());//打印 
        } 

    }  
    楼主改一下就可以了
     
      

  2.   

    不好意思,
    上面的贴错了。解决约瑟夫问题使用List比较简单,
    只要抓住核心代码就可以了
      

  3.   

    看到这问题我第一想法就是用c/c++ 里的链表~~受不了~~学Java久了后有点想念c/c++了~呵呵
      

  4.   

    发个简单点的吧:  public static void main(String[] args) {
    int i,j = 0;
    for(i = 2; i <= 500; i++) {

    j = (j+3)%i;
    }
    System.out.println(j+1);

    }
      

  5.   


    public class Josephus {
      public static void main(String args[]) {    
       if(args.length != 2) { //处理参数数目不正确情况
        System.out.println("Please Input a number!");
        return;
       }
      
       int i, j, n, m;
       n = Integer.parseInt(args[0]);
       m = Integer.parseInt(args[1]);
       if (n <= 0 || m <= 0) {//处理参数值不正确的情况
         System.out.println("Paramter must bigger than zero!");
         return;
       }
      
       int a[] = new int[n];
       for (i = 0; i < n; i++) a[i] = i + 1;
       int k = 1;   //标识处理第k个离开的人
       i = -1;    //数组下标,下一个为0,即第一个人
       while (true) { //k等于n表示只剩下一个人了
        for (j = 0; j < m;) {//在圈中数m个人
          i = (i + 1) % n;
         if (a[i] >0) j++;  //a[i] >0表示第i个人还没有离开
        }
        if(k==n) break;
        System.out.println("No." + a[i] + " is out!");
        a[i] = -1;   //表示该人离开
        k++;
       }
      
       System.out.println("No." + a[i] + " is the winner!");
      }
    }
    这代码是网上找的,楼主自己学习吧
      

  6.   

    这和以前c、c++ 里的猴子选大王的原理不是一样的嘛
    想法一:  
    可用数组来做,数到3的其对应的数组元素置为0或其他的,即把数到3的那个元素给标记了,数到最后一个没做标记的,即是结果。
    在java里既可用ArrayList实现,不过用Map的HashMap<K,V> 键和值对应关系来做更好。
    想法二:
    可用LinkedList或LinkedHashMap<K,V>来做,既模拟c++里的链表,数到3的那个元素,即从链表中删除掉,最后链表中只剩一个元素,即为所求。