首页 > 解决方案 > 如何通过详尽的枚举找到可被4整除且最接近55的数字

问题描述

我想使用详尽的枚举找到可被 4 整除且最接近 55 的数字。我已经尝试过以下代码。

current = 55
number = 0
for i in range(1,61):
    if i%4 == 0:
        diff = 55-i
        if abs(diff) < current:
            current = abs(diff)
            number = i
print(current)
print(number)

变量number正确地给出了答案。但我想知道这种方法是否是详尽的枚举。我在网上搜索过exhaustive enumeration,它有点暗示它是检查和猜测。

标签: python

解决方案


我想说你所做的并不是详尽的枚举。

这组数字(整数)具有无限数量的成员。您没有枚举该集合。您正在枚举从 1 到 60 的一组数字。这似乎是合理的,因为我们知道答案就在那里。但是,如果我们使用这些知识,我们所做的不是详尽的枚举,而这里的目标是使用它。

也许这样的事情相当于详尽的枚举:

from itertools import count

result = next(
    number
    for distance in count()
    for number in (55 + distance, 55 - distance)
    if number % 4 == 0
)

print(result)

for distance in count()枚举所有整数(itertools.count()从 开始0并将继续计数直到无穷大)。所以我们从最小的距离开始,如果没有到 55 的距离可以被 4 整除的数字,我们会询问下一个距离,依此类推,直到找到一个可以被 4 整除的数字。

这里的列举也不是详尽无遗的。当我们找到第一个结果时,我们只是决定停止,我们构建计算的方式确保没有数字可以被 4 整除并且更接近 55。

鉴于您的问题是关于整数(无限集)的问题,我认为详尽枚举不是正确使用的工具。如果您进行真正详尽的枚举,您的计算将永远不会终止。

(当然,正如其他人指出的那样,您可以使用推理来减少您需要测试的数字集的大小,然后对该减少的集合进行详尽的搜索。例如,您可以争辩说数字应该在 (55 - 4 = 51) 和 (55 + 4 = 59),然后在该集合上使用穷举搜索来找到其中可被 4 整除且最接近 55 的那个。)


推荐阅读