鱼C论坛

 找回密码
 立即注册
查看: 2848|回复: 7

[已解决]为什么这里总是6????

[复制链接]
发表于 2016-1-27 17:36:33 | 显示全部楼层 |阅读模式
0鱼币
直接上代码:
  1. import random
  2. list1 = []

  3. def  BinarySearch(number):
  4.     num = 0
  5.     low =1
  6.     height = 100
  7.     while low < height:
  8.         mid = (low + height) / 2
  9.         if mid < number:
  10.             low = mid + 1
  11.             num += 1
  12.         elif mid > number:
  13.             height = mid - 1
  14.             num += 1
  15.         else:
  16.             num += 1
  17.     return num

  18. for i in range(10):
  19.     answer = random.randint(1,10)
  20.     b = BinarySearch(answer)
  21.     list1.append(b)
  22.     print(list1)
复制代码

最佳答案
2016-1-27 17:36:34
因为你函数返回的是while循环的次数,达到 low<height恰好是6次。
此外程序还有一个BUG,mid = (low+height)/2得到的是小数。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-1-27 17:36:34 | 显示全部楼层    本楼为最佳答案   
因为你函数返回的是while循环的次数,达到 low<height恰好是6次。
此外程序还有一个BUG,mid = (low+height)/2得到的是小数。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-1-27 17:36:34 | 显示全部楼层
本帖最后由 zooo 于 2016-1-27 19:06 编辑

根据你的程序修改的,楼主可以参考下
  1. import random
  2. list1 = []
  3. def  BinarySearch(number):
  4.     num = 1
  5.     low =1
  6.     height = 102
  7.     mid = (low + height) // 2
  8.     while mid != number:
  9.         if mid < number:
  10.             low = mid
  11.             mid = (low + height) // 2
  12.             num += 1
  13.         elif mid > number:
  14.             height = mid
  15.             mid = (low + height) // 2
  16.             num += 1
  17.     return num

  18. for i in range(100):
  19.     answer = random.randint(1,100)
  20.     b = BinarySearch(answer)
  21.     list1.append(b)
  22. print(list1)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-1-27 18:18:05 | 显示全部楼层
本帖最后由 zooo 于 2016-1-27 18:22 编辑

感觉原理比较难解释
用几个值试一下大概就知道了
为了快速得到返回值,假设height =10,answer = 5
第一次:
mid = 5.5
num =1
范围变为【1,4.5】
第二次:
mid = 2.75
num = 2
范围变为【3.75,4.5】
第三次:
mid = 4.125
num = 3
范围变为【5.125,4.5】此时low>height了
返回num = 3

假设height =10,answer = 6
第一次:
mid = 5.5
num =1
范围变为【6.5,10】
第二次:
mid = 8.25
num = 2
范围变为【6.5,7.25】
第三次:
mid = 6.75
num = 3
范围变为【6.5,5.75】此时low>height了
返回num = 3

两次实验一次是一直改变low,一次是一直改变height,试其它值也只会出现这两种情况,所以最后列表中全为 3
如果height = 100 的值就都为6了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-1-27 18:39:36 | 显示全部楼层
冬雪雪冬 发表于 2016-1-27 18:24
因为你函数返回的是while循环的次数,达到 low
  1. def BinarySearch(number):
  2.         num = 0
  3.         low = 1
  4.         height = 100
  5.         while low < height:
  6.                 mid = (low + height) // 2
  7.                 if mid < number:
  8.                         low = mid + 1
  9.                         num += 1
  10.                 elif mid > number:
  11.                         height = mid - 1
  12.                         num += 1
  13.                 else:
  14.                         num += 1
  15.         return num

  16. print(BinarySearch(50))
复制代码



这段啥都没输出
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-1-28 14:10:33 | 显示全部楼层
加油
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-2-4 10:32:49 | 显示全部楼层
没看明白到底用来干嘛的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-2-19 11:37:49 | 显示全部楼层
ZHICHI
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-19 10:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表