猜数游戏与二分查找
还记得猜数游戏吗?之前的问题是:如果你是攻击者,你能保证在10次(含)之内猜出对方的数字吗?
因为$2^{10} = 1024 > 1000$, 所以如果运用二分查找的话,我们作为攻击者是肯定可以赢得比赛的。
实现1-1000数列的二分查找
既然二分查找适用于猜数游戏,那让我们先套用一下上节课学习的二分查找算法实现代码,来实现以下1-1000数列的二分查找。
代码如下:
arr = list(range(1, 1001)) # 生成一个List,里面顺序存储着1-1000这一千个元素
tn = 635 # 可以随便改
low = 0
high = len(arr) - 1
while (low <= high):
m = int((high - low) / 2) + low
if (arr[m] == tn):
# 把打印出目标数所在的位置下标改成直接打印出目标数
print("Succeeded! The target number is: ", arr[m])
break
else:
if (arr[m] < tn):
low = m + 1
else:
high = m - 1