有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);
boolean | add(E e) 将指定元素添加到此向量的末尾。 |
E | remove(int index) 移除此向量中指定位置的元素。 |
题目基本思想呢是先移除一个,然后又在Vector后边加一个相同的,然后移除第二个,再加上第二个,到第三个的时候只移除,不添加。
public static void main(String[] args) {
Vector<String> a = new Vector<String>(); //试用泛型更加规范
for(int i=1; i<=10; i++)
{
a.add("第" + i + "个孩子");
}
for(;;)
{
if(a.size()==1) break;
for(int k=0; k<2; k++)
{
String j = a.remove(0); //remove方法返回被移除的对象
a.add(j); //将刚移除的对象再次加入
}
a.remove(0);
}
System.out.println(a);
}