用数学方法求解

时间:2015-02-21 00:05:56

标签: java

以下是问题:

有100个人(让他们命名为1到100)任务是消除他们的下一个人并将杀戮工具传给下一个活着的人。

示例:
1必须消灭人2并将杀人工具传递给人3,依此类推。

问题是,我必须找到最后一个活着的人。

现在我想用公式代替数组来解决上面的问题。我认为解决方案是这样的。

我使用boolean的数组循环它们,同时将下一个索引标记为false。然后再次循环以找到哪个项目保持为真。

提前致谢

1 个答案:

答案 0 :(得分:1)

答案不是99.用较小的术语来思考,好像只有10个人,答案不会是9.这就是算法用完的方法:

1次传球2次传球至3次传球 3次传球4次传球至5次传球 5次传球6次传球至7次传球 7次传球8次传球至9次传球 9次传球10次传球至1次 - 现在人数为1,3,5,7,9 1次杀死3次传球至5次传球 5次传球7次传球至9次 - 现在人数为1,5,9次 9次传球,1次传球,5次传球 5杀9;只剩下5个。

为了实现这一点,将值放入ArrayList中,并删除被杀死的人,直到ArrayList的大小为1:

    int numPeople = 100;
    List<Integer> list = new ArrayList<Integer>();
    for(int i = 1; i <= numPeople; i++) list.add(i);

    int current = 0;
    while(list.size() > 1)
    {

        list.remove(current+1);
        current++;
        //Circle back around to the beginning
        if(current+1 >= list.size()) current = current - list.size();  
    }
    System.out.println(list.get(0));