500个小孩一圈,数三个数,退出一人,问最后哪个小孩剩下

来源:百度知道 编辑:UC知道 时间:2024/05/07 23:59:58
这个程序该怎么写啊

//我也来凑下热闹,呵呵~~~ 如果结果不是450,别看我的程序了
//提供了两种方法,其实是一样的,一种利用了对象,一种就是一般的算法
import java.util.ArrayList;

public class T {
public static void main(String[] arg){
a(500,3); //人数=500,出局者在3次之后
b(500,3);
}
//一般算法
static void b(int count,int out){
ArrayList<Integer> l = new ArrayList<Integer>();
int x = 0;
for(int i=0; i<count; i++)
l.add(i+1);
while(l.size()>1){
for(int i=0; i<l.size(); i++){
++x;
if(x%(out+1)==0){
l.remove(i);
l.add(i,-1);//每间隔out个就将下一个元素标志为-1
}
}
for(int i=0; i<l.size(); i++)
if(l.get(i)<0)l.remove(i);//移除标志为-1的元素
}
System.out.println("Last: "+l.get(0));
}
//利用对象
private static void a(int count,int out) {
ArrayList<Child> l = new ArrayList<Child>();
while(count-->0)l.add(new Child());
int x=0;
while(l.size()>1){
for(Child c