一个简单的二分法实现

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

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

                                               一个简单的二分法实现

先举个例子,在展示代码

比如在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, "次")

```

一个简单的二分法实现一个简单的二分法实现 丑到吓哭小女孩 发布了6 篇原创文章 · 获赞 2 · 访问量 1664 私信 关注
上一篇:leetcode 猜数字大小1/2(374、375 二分、区间动态规划)


下一篇:用random函数编写趣味猜数字游戏