嗨,我碰到這個問題,並試圖解決這個尋找倖存者時,N多人都坐在一個圓圈
花幾秒鐘想像你是在排成一圈100把椅子的房間。這些椅子從一個到一個百個按順序編號。 在某個時間點,第一把椅子上的人將被告知要離開房間。第二把椅子上的人將被跳過,第三把椅子上的人將被告知離開。去旁邊的是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是的,其餘椅子上的人將根據計數變量被踢出。 – user3096840