以下是问题:
有100个人(让他们命名为1到100)任务是消除他们的下一个人并将杀戮工具传给下一个活着的人。
示例:
1必须消灭人2并将杀人工具传递给人3,依此类推。
问题是,我必须找到最后一个活着的人。
现在我想用公式代替数组来解决上面的问题。我认为解决方案是这样的。
我使用boolean
的数组循环它们,同时将下一个索引标记为false。然后再次循环以找到哪个项目保持为真。
提前致谢
答案 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));