【发布时间】:2015-03-07 03:06:48
【问题描述】:
您好,我遇到了这个问题并试图解决这个问题
花点时间想象一下,你在一个房间里,房间里有 100 把椅子排成一圈。这些椅子按从一到一百的顺序编号。 在某个时间点,1 号椅子上的人会被告知离开房间。 2 号椅子上的人将被跳过,3 号椅子上的人将被告知离开。接下来是坐在#6 号椅子上的人。换句话说,最初会跳过 1 个人,然后是 2、3、4.. 等等。这种跳跃模式将继续围绕圆圈进行,直到只剩下一个人......幸存者。请注意,当人离开房间时,椅子会被移走。编写一个程序来确定幸存者坐在哪把椅子上。
我取得了不错的进展,但遇到了一个问题,计数达到 100 后,不知道如何从这里迭代,谁能帮助我,这是我的代码
import java.util.ArrayList;
public class FindSurvivor {
public static void main(String[] args) {
System.out.println(getSurvivorNumber(10));
}
private static int getSurvivorNumber(int numChairs) {
// Handle bad input
if (numChairs < 1) {
return -1;
}
// Populate chair array list
ArrayList<Integer> chairs = new ArrayList<Integer>();
for (int i = 0; i < numChairs; i++) {
chairs.add(i + 1);
}
int chairIndex = 0;
int lr =0;
while (chairs.size() > 1) {
chairs.remove(lr);
chairIndex+=1;
System.out.println(lr+" lr, size "+chairs.size()+" index "+chairIndex);
if(lr==chairs.size()||lr==chairs.size()-1)
lr=0;
lr = lr+chairIndex;
printChair(chairs);
System.out.println();
}
return chairs.get(0);
}
public static void printChair(ArrayList<Integer> chairs){
for(int i : chairs){
System.out.print(i);
}
}
}
【问题讨论】:
-
那么在第二次迭代中,坐在1、4、7等椅子上的人(只计算剩下的椅子)会被踢出去?
-
大概你想用类似
lr = (lr + chairIndex) % chairs.size()的东西替换你当前的lr更新。 -
@TedHopp 是的,其余椅子上的人将根据计数变量被踢出..
-
不存在这样的椅子。您已经拆除了每把椅子并将其用作武器。你是唯一的幸存者。