刷题记录-牛妹的蛋糕

牛妹的蛋糕

https://www.nowcoder.com/practice/1f7280d9897d4305b2da6790fe131729

第一天牛妹吃掉蛋糕总数三分之一(向下取整)多一个,第二天又将剩下的蛋糕吃掉三分之一(向下取整)多一个,以后每天吃掉前一天剩下的三分之一(向下取整)多一个,到第n天准备吃的时候只剩下一个蛋糕。
牛妹想知道第一天开始吃的时候蛋糕一共有多少呢?
输入n(day),要求输出int型 蛋糕的总体数量(也就是第一天有多少蛋糕)。


思考过程:
这种题目和斐波那契有些相似,最终的结果需要根据其他数值来推导。

假设第一天时有x个蛋糕,求x值
从day 1 到day n的变化情况如下:

day eat cake left cake
n 1 f(n) = 1
n-1 1/3 * f(n-2) +1 f(n-1) = 2/3 * f(n-2) + 1
…… …… ……
2 1/3 * f(1) +1 f(2) = 2/3 * f(1) - 1
1 1/3 * x +1 f(1) = 2/3*x - 1

从上可得,x = (f(1) + 1) * 3/2,向下取整
仅知最后一天剩余1个,因此需从day n反推:
res(day n-1) =(f(n) + 1) * 3/2 = (1+1) * 3/2 = 3 (共2天,则第一天有3个蛋糕)
res (day n-2) = (f(n-2) + 1) * 3/2 = (3+1) *3/2 = 6 (共3天,则第一天有6个蛋糕)
res (day n-3) = (f(n-3) + 1) * 3/2 = (6+1) *
3/2 = 10 (共4天,则第一天有10个蛋糕)
以上解法没有考虑更大数值的情况(判题有问题,所以就单纯按照下述代码写就可)


【不支持php,所以用python解答的】

import math;
class Solution:
    def cakeNumber(self , n ):
        # write code here
        if (n < 1):
            return 0;
        x = 1;
        for i in range(1,n):
            x = math.floor(3*(x+1)/2);
        return x;
全部评论

相关推荐

2024-12-13 17:03
门头沟学院 Java
点赞 评论 收藏
分享
01-10 21:46
门头沟学院 HTML5
没有光环,就努力发光吧:多益笑话一个
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务