贪吃的小Q--java实现

问题描述

小Q的父母要出差N天,走之前给小Q留下了M块奶糖。小Q决定每天吃的奶糖数量不少于前一天吃的一半,但是他又不想在父母回来之前的某一天没有奶糖吃,请问他第一天最多能吃多少块奶糖
输入描述: 
每个输入包含一个测试用例。 
每个测试用例的第一行包含两个正整数,表示父母出差的天数N(N<=50000)和巧克力的数量M(N<=M<=100000)。

输出描述: 
输出一个数表示小Q第一天最多能吃多少块奶糖。 
示例1 
输入 
3 7 
输出 
4

思想:二分的思想

上一下代码,具体的思路注释在代码里了,注意while层循环和for层循环的不同作用,while层循环主要是用来规划吃糖的计划的,for层循环来验证这样的计划是否可行,如果不行,那么再进while循环里二分规划下一个吃糖计划。

public class 贪吃的小Q {

    public static void main(String[] args) {
        int n,m,temp,now,mid;
        boolean flag;
        Scanner scanner = new Scanner(System.in);
        //父母的出差天数n
        n=scanner.nextInt();
        //一共有几块奶糖,奶糖数m
        m=scanner.nextInt();
        int l=1,r=m;
        while(l!=r)
        {   //如果够吃,那么flag就是true
            flag=true;
            //利用二分查找的思想来判断第一天最多能吃多少块
            mid=(l+r+1)/2;
            //temp保存的是奶糖总数m,在while这层循环里是不变的
            temp=m;
            //now可以理解为一次吃几个糖
            now=mid;
            //这个for循环很关键
            //注意条件j

大家可以debug一遍看一看,就好理解多了。
 

你可能感兴趣的:(基础算法与实际问题)