华为OD机试 - 分糖果实现(无分支) python

 原文华为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())

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值