拼多多2018年秋招提前批——喝可樂複製問題

題目描述

有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);
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章