拼多多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);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/huan_chen/article/details/81182465
今日推荐