我正在尝试编写一个python脚本,找到一个未知数字,尽可能少尝试。
我所知道的是数字是< 10000
每当我输入错误的输入时,我都会收到“错误”响应。 当我找到正确的号码时,我会得到“成功”的回复。
我们假设在这种情况下,数字是124.
你会如何在Python中解决这个问题?
感谢您的帮助。我真的坚持这个:(
答案 0 :(得分:4)
如果您知道的数字为< 10000
全部,则必须尝试1
和9999
之间的所有数字(包括)。评论中建议的二进制搜索算法没有帮助,因为未命中不会告诉您是否太高或太低。
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