有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数,直到最后剩下一个孩子为止。问剩下第几个孩子。下面的程序以10个孩子为例,模拟了这个过程,请完善之(提示:报数的过程被与之逻辑等价的更容易操作的过程所代替)。     Vector a = new Vector();     for(int i=1; i<=10; i++)     {         a.add("第" + i + "个孩子");     }     for(;;)     {         if(a.size()==1) break;         for(int k=0; k<2; k++)             ________________;         a.remove(0);     }     System.out.println(a);应该怎么做?

解决方案 »

  1.   

             {
              if (a.size()>=3) {
              a.insertElementAt(a.get(0),a.size());
              a.remove(0);
    }
              if (a.size()==2) {
    break;
    }
             }
      

  2.   

    设定一个计数器,Num 报一个数+1;当num=3时,remove该小孩。 最终要有一个循环体,当小孩总数total=1时,循环结束。
      

  3.   

    约瑟夫环问题
    百度一下一大堆
    http://mopishv0.blog.163.com/blog/static/54455932200981295817729/
    LZ也可以看看这个 有公式
      

  4.   

    第二个for循环没什么用
    import java.util.Vector;public class Test {
        public static void main(String[] args) {
            Vector a = new Vector();        for (int i = 1; i <= 10; i++) {
                a.add("第" + i + "个孩子");
            }        int i = 0;
            for (;;) {
                if (a.size() == 1) break;
                i = (i + 2) % a.size();
                a.remove(i);
            }        System.out.println(a);
        }
    }
      

  5.   

    *^_^*,用那个for循环的也可以
    import java.util.Vector;public class Test {
        public static void main(String[] args) {
            Vector a = new Vector();        for (int i = 1; i <= 10; i++) {
                a.add("第" + i + "个孩子");
            }        for (;;) {
                if (a.size() == 1) break;
                for (int k = 0; k < 2; k++)
                    a.add(a.remove(0));
                a.remove(0);
            }        System.out.println(a);
        }
    }
      

  6.   

    Vector是使用数组来存储数据的,每删除一个元素,这个元素后面的元素都要被向前移到一个位置,效率很不好,最好可以使用LinkedList来代替Vector
      

  7.   

    楼主这个题好像是那个 软件职业大赛上的例题啊,呵呵http://www.miit-nstc.org/Article/ShowArticle.asp?ArticleID=90