题目描述
小明从糖果盒中随意抓一把糖果,每次小明会取出一半的糖果分给同学们。
当糖果不能平均分配时,小明可以选择从糖果盒中(假设盒中糖果足够)取出一个糖果或放回一个糖果。
小明最少需要多少次(取出、放回和平均分配均记一次),能将手中糖果分至只剩一颗。
输入描述:
抓取的糖果数(<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))