日期:2014-05-20  浏览次数:20749 次

大家帮帮忙啊!!!看看谁的方法最好
500个小孩子,手拉手围成一个圈,
从1开始数,每数到3的时候,那第3个小孩子退出圈,
让后又从1开始点数,循环下去,问最后留下的那个小孩子,
是500个小孩的第几个

------解决方案--------------------
刚才那个性能不大好哦,呵呵

Java code

import java.util.LinkedList;
import java.util.List;

public class Temp
{
    public static void main(String args[])
    {
        System.out.println(getLastOne(500, 3));
    }
    
    public static int getLastOne(int length, int del)
    {
        List<Integer> list = new LinkedList<Integer>();
        
        for(int i = 1; i <= length; i++)
        {
            list.add(i);
        }
        
        while(list.size() > 1)
        {
            delOne(list, del);
        }
        
        return list.get(0);
    }
    
    public static void delOne(List<Integer> list, int del)
    {
        for(int i = 0; i < del - 1; i++)
        {
            list.add(list.get(i));
        }
        
        for(int i = 0; i < del; i++)
        {
            list.remove(0);
        }
    }
}

------解决方案--------------------
Java code
import java.util.*;

public class TestCollection
{
    public static void main(String[] args)
    {
        ArrayList<Integer> list = new ArrayList<Integer>();
        for (int i = 1; i <= 500; i++)
        {
            list.add(i);
        }
        int k = 0;
        while (list.size() > 1)
        {
            if (k >= list.size())
                k = list.size() - 1;
            if (k > list.size() - 3)
            {
                k = k + 2 - list.size();
            }
            else
            {
                k += 2;
            }
            System.out.println(list.get(k));
            list.remove(k);
        }
        System.out.println("It's me!" + list.get(0));
    }
}