【活动二】编程解决问题,二分查找法统计查字典次数。
任务要求:假设字典为1000页,若用二分法来翻到用户输入的具体指定的页数,则需要的最大查找次数为?
设计算法:
取总页码数据中间值,将待查数据与中间值进行比较,调整边界值,缩小数据区间,通过不断地对比、调整、缩小区间,最终查找到目标数据。
编写程序:
x=int(input("请输入需要查找的具体页码数:"))
cishu =0
flag1=1
flag2=1000
while flag1<=flag2:
mid=(flag1+flag2)//2
cishu=cishu+1
if x<mid:
flag2=mid-1
elif x>mid:
flag1=mid+1
else:
break
print("最大查找次数为:",cishu)
【活动三】编程解决问题,二分查找法求解数学问题。
任务要求:求解一个正整数x(x>0)的算术平方根。
算法思想:
结合数学知识点思考,如果一个数的平方大于待求解的这个数,那么它的算术平方根也比待求解的这个数大;如果一个数的平方小于待求解的这个数,那么它的算术平方根也比待求解的这个数小。例如:16的算术平方根是4,起始区间设置为[0,16],第一次取中间值8,8**2>16,调整边界值,缩小区间[0,8];第二次取中间值4,4**2=16,问题求解完成;如未求解完成,继续取中间值,调整区间。
编写程序:
num=int(input("请输入一个大于0的正整数:"))
flag1=0
flag2=num
mid=(flag1+flag2)/2
while abs(mid**2-num)>=0.00001:
if mid**2>num:
flag2=mid
else:
flag1=mid
mid=(flag1+flag2)/2
print(mid)