分糖果
题目描述
小明从糖果盒中随意抓一把糖果
每次小明会取出一半的糖果分给同学们
当糖果不能平均分配时
小明可以从糖果盒中(假设盒中糖果足够)取出一个或放回一个糖果
小明至少需要多少次(取出放回和平均分配均记一次)能将手中糖果分至只剩一颗
输入描述
抓取糖果数(小于1000000
),例如15
输出描述
最少分至一颗糖果的次数,例如5
示例一
输入
15
Copy
输出
5
def solution(x):
count = 0
while x != 1:
if x == 3:
count += 2
break
if x % 2 == 0:
x = x // 2
elif (x + 1) % 4 == 0 or x == 1:
x += 1
else:
x -= 1
count += 1
print(count)
def solution_1(y):
if y == 1:
return 0
elif y % 2 == 0:
return solution_1(y // 2) + 1
else:
return min(solution_1(y - 1), solution_1(y + 1)) + 1
if __name__ == '__main__':
x = int(input())
solution(x)