题目描述

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

题解:

题目问的是第一天吃的什么,给的是吃的天数
如果是正着推:
dp[i]表示第i天还没吃蛋糕前,蛋糕的数量
dp[i+1]=dp[i]*(2/3)-1

dp[i]=(dp[i*3]+1)*2/3
模拟上面这个递推式即可

代码:

class Solution {
   
public:
    /** * * @param n int整型 只剩下一只蛋糕的时候是在第n天发生的. * @return int整型 */
    int cakeNumber(int n) {
   
        // write code here
        int sum=1;
        for(int i=n-1;i;i--)
        {
   
            sum=3*(sum+1)/2;
        }
        return sum;
    }
};