题目描述
有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);
}
}
}