題目描述
有A、B、C、D四個人排成一隊喝可樂,每次喝完複製自己,問數字n的人名?
思路
假設總人數爲 sumPeople,每次複製的遞增規律爲:
sumPeople += 4 * Math.pow(2,i++); // i表示第幾次複製
i一直增加到大於等於總的可樂瓶數,然後根據 sumPeople 和 可能總數的差值來計算誰買到的是最後一瓶可樂。
代碼
package Interview.pinduoduo;
import java.util.Scanner;
public class maiyinliang {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String[] name ={"Alice", "Bob", "Cathy", "Dave"};
String res ="";
while (in.hasNextInt()) {//注意while處理多個case
int number = in.nextInt();
int sumPeople = 0;
int i=0;
while(sumPeople < number){
//每一次人數的遞增規律
sumPeople += 4 * Math.pow(2,i++);
}
int levelPeople = (int)Math.pow(2,i-1); //超過總數這一層,每個人的人數
//計算誰買到的可樂
int diff = sumPeople - number; //多出來的部分,
int index = 4;
while(diff>=0){
//差值減去這一層每個人的人數
diff = diff - levelPeople;
index--;
}
res = name[index];
System.out.println(res);
}
}
}