找到尝试次数最少的未知数字

时间:2016-02-12 10:57:48

标签: python python-2.7 python-3.x math

我正在尝试编写一个python脚本,找到一个未知数字,尽可能少尝试。

我所知道的是数字是< 10000

每当我输入错误的输入时,我都会收到“错误”响应。 当我找到正确的号码时,我会得到“成功”的回复。

我们假设在这种情况下,数字是124.

你会如何在Python中解决这个问题?

感谢您的帮助。我真的坚持这个:(

2 个答案:

答案 0 :(得分:4)

如果您知道的数字为< 10000 全部,则必须尝试19999之间的所有数字(包括)。评论中建议的二进制搜索算法没有帮助,因为未命中不会告诉您是否太高或太低。

for i in range(1, 10000):
    if i == number_you_are_looking_for:
        print("found it")
        break

答案 1 :(得分:0)

我认为最快的方法是使用二进制搜索,它在O(log n)中给出答案。

def binary_search(n, min_value, max_value):
    tries = 0
    found = False

    if max_value < min_value:
        print("Maximum value must be bigger than the minimum value")
    elif n < min_value or n > max_value:
        print("The number must be between min_value and max_value")
    else:
        while min_value < max_value and not found:
            tries += 1

            mid_value = (min_value + max_value)//2

            if mid_value == n:
                found = True
            else:
                if n < mid_value:
                    max_value = mid_value - 1
                else:
                    min_value = mid_value + 1

            print([(min_value, max_value), (mid_value, n), tries])

        print("The number is:", str(n))
        print("Tries:", str(tries))

示例:

binary_search(7, 0, 10)
>> The number is: 7
>> Tries: 2

binary_search(667, 0, 1000)
>> The number is: 667
>> Tries: 8

binary_search(2**19, 2**18, 2**20)
>> The number is: 524288
>> Tries: 19