You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python猜数字游戏改造疑问:最小猜测次数与最优猜法

问题解答

1. 解题思路是否符合练习要求?

整体思路符合要求:

  • 采用二分法让电脑猜测,每次根据用户反馈缩小范围,契合“最小必要次数”的核心要求;
  • 通过限制猜测次数不超过计算出的max_tries,超出后判定作弊,满足作弊识别需求;
  • 最终输出也使用了题目指定语句。
    但细节上存在小问题(比如max_tries的计算方式、循环条件),调整后可完全达标。

2. 用log2(larger-smaller+1)计算最小猜测次数后,二分法猜测次数仍超该值,如何解决?

问题出在**max_tries的计算逻辑和循环条件设置**:

  • 首先,log2(n)的结果若不是整数,需向上取整而非用round。比如范围是1-5(共5个数),log2(5)≈2.32,实际二分法最多需要3次才能覆盖所有情况,因此应该用math.ceil(log2(larger-smaller+1))计算最小必要次数;
  • 其次,你的循环逻辑存在偏差:count初始为0,循环内先执行count +=1再猜测,count <= max_tries的条件会导致实际猜测次数比max_tries多1次。比如max_tries=3时,会执行4次猜测。调整方式二选一:要么将count初始值设为1,循环条件改为count <= max_tries;要么保持count初始为0,循环条件改为count < max_tries。

修改后的关键代码示例:

from math import log2, ceil

# 向上取整计算最小必要次数
max_tries = ceil(log2(larger - smaller + 1))
print(f"PC should guess in no more than {max_tries} tries\n")

count = 0
# 保证最多猜测max_tries次
while count < max_tries:
    count += 1
    pc_guess = (larger + smaller) // 2
    # 后续逻辑不变...

3. 使用(smaller+larger)//2计算电脑的最优猜测是否正确?

是正确的。二分法的核心就是每次取当前区间的中点作为猜测值,这样能保证每次猜测后搜索范围缩小到原来的一半左右,是理论上能达到最小猜测次数的最优选择。(smaller+larger)//2是整数区间的向下取整中点,对于整数范围的猜测来说,不管是向下取整还是向上取整(比如(smaller+larger+1)//2),都能保证最优效率,仅在区间长度为偶数时的中点选择有差异,不影响最终的最小次数。


内容的提问来源于stack exchange,提问作者Spellbinder2050

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:50:23