打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
一个简单的二分法实现

哈喽,已经开始闲的蛋疼的笔者开始研究同样蛋疼的算法,学算法当然从二分法开始咯

简单的说,二分法就是对半切割查找(反正我是这么理解的)

                                               

先举个例子,在展示代码

比如在1~100之间,要猜的数字是20,利用二分法就会有这样的情况发生...

S1:在1~100中取中间 50,比较 50 和 20,发现 20 比 50小,那么20肯定比51小,这样就排除了 50、51、52....100

S2:在1~49中取中间 25,比较 25 和 20,发现 20 比 25小,那么20肯定比26小,这样就排除了25、26、27...49

S3:在1~24中取中间 12 ,比较 12 和 20 ,发现 20 比 12 大,那么20肯定比11大,这样就排除了12、11、10...1

S4 :(笔者你是在记流水账啊,这里跳过)

...

                                             

最后,得出了要猜的次数

好了,上代码,注释都在代码中,并且用了随机数。写的不是特666,就用最简单的方式介绍下二分法,写的不好望大佬指正

import random
answer_number = random.randint(1, 100)  # 要猜的数字
print("要猜的数字 ", answer_number)
guess_list = [i for i in range(1, 101)]  # 范围1-100
min_number = min(guess_list)  # 最小数
max_number = max(guess_list)  # 最大数
mid_number = (max_number   min_number) // 2
guess_num = 1  # 猜的次数
while answer_number != mid_number:
    min_number = min(guess_list)  # 最小数
    max_number = max(guess_list)  # 最大数
    mid_number = (max_number   min_number) // 2
    print("开始的中间数", mid_number)
    guess_num  = 1
    # 如果猜的数字小于中间数
    if answer_number < mid_number:
        # 最大的数就变成中间数-1
        # 范围变成最小的数 - 中间数-1
        # 中间数变成最大的数
        mid_number = mid_number - 1
        print("最大的数 ", mid_number)
        guess_list = [i for i in range(min_number, mid_number   1)]
        print("范围 ", guess_list)
        print('\n')
    elif answer_number > mid_number:
        # 最小的数就变成中间数
        # 范围变成中间数 - 最大的数
        # 中间数变成最小的数
        print("最小的数 ", mid_number)
        guess_list = [i for i in range(mid_number, max_number   1)]
        print("范围 ", guess_list)
        print('\n')
print("猜的数字是", answer_number)
print("猜了", guess_num, "次")

```

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
山峰数组的顶部
Python基础知识储备,小白都能看懂的Python函数,实战操作演示
Python算法之二分法01
if语句--python
Python中Random模块的用法
二分法(折半查找)的运用之java实现猜数字游戏
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服