原文华为OD机试 - 分糖果(Java & JS & Python)_华为od抓取糖果次数_伏城之外的博客-CSDN博客
题目描述
小明从糖果盒中随意抓—把糖果,每次小明会取出—半的糖果分给同学们。
当糖果不能平均分配时,小明可以选择从糖果盒中(假设盒中糖果足够)取出一个糖果或放回一个糖果。
小明最少需要多少次(取出、放回和平均分配均记一次),能将手中糖果分至只剩一颗。
输入描述
抓取的糖果数(<10000000000) : 15
输出描述
最少分至—颗糖果的次数:5
import sys
# 输入获取
num = int(input())
def recursive(num, count, ans):
if num == 1:
ans[0] = min(ans[0], count)
return
if num % 2 == 0:
recursive(num // 2, count + 1, ans)
elif num==3:
recursive(num - 1, count + 1, ans)
elif (num//2) % 2 == 1:
recursive(num + 1, count + 1, ans)
else :
recursive(num - 1, count + 1, ans)
# 算法入口
def getResult():
ans = [sys.maxsize]
recursive(num, 0, ans)
return ans[0]
# 算法调用
print(getResult())