【每周一算】一张大饼切n刀,最多可以切多少块?

这是无意中在一个录音中听到的一个题目:一张很大很大的饼,给你一把足够长的刀,切n刀,最多可以得多少块?

这个问题听起来很简单,还是用程序记录一下吧。

解题:一刀都不切,有1块饼;

切第一刀,得2块饼;

切第二刀,这一刀跟原来那一刀有一个交点,把两块再分出两块,2+2=4;

切第三刀,为了得到更多,要让这一刀跟原来两刀都有交点,4+3=7;

切第四刀,为了得到更多,要让每一刀都跟之前得刀尽量都有交点,7+4=11;

....

切第n刀,f(n-1) + n;

代码如下:

package com.jandmin.demo.leetcode;

/**
 * @description: 切大饼最大切法
 *      一张大饼切n刀,最多可以切多少块?
 * @author: JandMin
 * @create: 2019-06-14 09:06
 **/
public class CutThePie {
    public static void main(String[] args) {
        for(int i=0; i<11; i++){

            int total = cutPie(i);
            print("方式一",i,total);
            int num = 1;
            for(int j = 0; j<=i; j++){
                num = cutPie(num,j);
                if(j == i){
                  print("方式二",i,num);
                  break;
                }
            }
        }
    }
    /**
     * @Description: 打印
     * @Date: 2019/6/14
     * @param name
     * @param n
     * @param total
     * @return: void
     */
    private static void print(String name,int n,int total){
        System.out.println(name + "切 " + n + " 刀最多得到 " + total + " 块饼");
    }

    /**
     * @Description: 方式一:一次性切大饼
     * @Date: 2019/6/14
     * @param knife 切得刀数量
     * @return: int 得到得答饼块数量
     */
    private static int cutPie(int knife) {
        if(knife <= 0){
            return 1;
        }
        return cutPie(knife-1) + knife;
    }
    /**
     * @Description: 方式二:切大饼切一刀
     * @Date: 2019/6/14
     * @param before 切之前得大饼块数
     * @param knife 切的第第几刀
     * @return: int 当前切完的大饼块数量
     */
    private static int cutPie(int before,int knife){
        return before + knife;
    }
}

结果:

方式一切 0 刀最多得到 1 块饼
方式二切 0 刀最多得到 1 块饼
方式一切 1 刀最多得到 2 块饼
方式二切 1 刀最多得到 2 块饼
方式一切 2 刀最多得到 4 块饼
方式二切 2 刀最多得到 4 块饼
方式一切 3 刀最多得到 7 块饼
方式二切 3 刀最多得到 7 块饼
方式一切 4 刀最多得到 11 块饼
方式二切 4 刀最多得到 11 块饼
方式一切 5 刀最多得到 16 块饼
方式二切 5 刀最多得到 16 块饼
方式一切 6 刀最多得到 22 块饼
方式二切 6 刀最多得到 22 块饼
方式一切 7 刀最多得到 29 块饼
方式二切 7 刀最多得到 29 块饼
方式一切 8 刀最多得到 37 块饼
方式二切 8 刀最多得到 37 块饼
方式一切 9 刀最多得到 46 块饼
方式二切 9 刀最多得到 46 块饼
方式一切 10 刀最多得到 56 块饼
方式二切 10 刀最多得到 56 块饼

猜你喜欢

转载自blog.csdn.net/ItRuler/article/details/91949921
今日推荐