牛妹的蛋糕

题目描述
众所周知,牛妹非常喜欢吃蛋糕。
第一天牛妹吃掉蛋糕总数三分之一(向下取整)多一个,第二天又将剩下的蛋糕吃掉三分之一(向下取整)多一个,以后每天吃掉前一天剩下的三分之一(向下取整)多一个,到第n天准备吃的时候只剩下一个蛋糕。
牛妹想知道第一天开始吃的时候蛋糕一共有多少呢?

示例1
输入
2
输出
3
示例2
输入
4
输出
10

class Solution {
public:
    /**
     * 
     * @param n int整型 只剩下一只蛋糕的时候是在第n天发生的.
     * @return int整型
     */
    int cakeNumber(int n) {
        //递推关系
        //若只有1天 则蛋糕last=1;
        //若有2天,则最后一天必须剩余last = 1个蛋糕故.第一天的蛋糕数则有n-(⌊n/3⌋+1)=last;故n-⌊n/3⌋=(last+1)
        //若有3天,则最后两天必须是上面的两天.故类似推理
        int last =1;
        for(int i=0;i<n-1;i++)
            last = (last+1)*3/2;
        return last;
    }
};

你可能感兴趣的:(编程算法学习,动态规划)