[题目描述] 小明从糖果盒中随意抓一把糖果,每次小明会取出一半的糖果分给同学们。当糖果不能平均分配时,小明可以选择从糖果盒中(假设盒中糖果足够)取出一个糖果或放回一个糖果。小明最少需要多少次

题目描述
小明从糖果盒中随意抓一把糖果,每次小明会取出一半的糖果分给同学们。

当糖果不能平均分配时,小明可以选择从糖果盒中(假设盒中糖果足够)取出一个糖果或放回一个糖果。

小明最少需要多少次(取出、放回和平均分配均记一次),能将手中糖果分至只剩一颗。

输入描述:
抓取的糖果数(<10000000000):15

输出描述:
最少分至一颗糖果的次数:5

示例 1
输入:15
输出:5

解释:
(1) 15+1=16;
(2) 16/2=8;
(3) 8/2=4

(4)4/2=2

(5)2/2=1
 

def candy_fetch(_sum: int, times: int, times_list: list):
    """
    :param _sum: 手中剩余糖果数量
    :param times: 操作次数
    :param times_list: 结果存储列表
    :return: 
    """
    if _sum == 1:
        times_list.append(times)
        return times
    if _sum % 2 == 0:
        candy_fetch(int(_sum/2), times+1, times_list)
    else:
        candy_fetch(_sum+1, times+1, times_list)
        candy_fetch(_sum-1, times+1, times_list)


if __name__ == '__main__':
    res = []
    candy_fetch(2000, 0, res)
    print(res)
    print(min(res))

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值