python - 如何通过详尽的枚举找到可被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
,它有点暗示它是检查和猜测。
解决方案
我想说你所做的并不是详尽的枚举。
这组数字(整数)具有无限数量的成员。您没有枚举该集合。您正在枚举从 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 的那个。)
推荐阅读
- css - 使用变换和可见性 CSS 属性时 SVG 未出现在 Firefox 中
- angular - 在 Angular 通用中处理主机侦听器和第三方库
- node.js - NODE JS Knex 连接到 Gcloud 上的 Postgresql
- android - 第三方 API 请求在生产中失败,但在分段中有效。如何解决这个问题?
- javascript - Why is minify js / css page speed and yslow different?
- ember.js - 断言失败:没有名为“存储”的应用程序初始化程序
- c++ - 实现高分辨率计时器的最佳方法
- reactjs - Reactjs中的天气状态如何
即使“承诺”已完成,组件仍未定义? - android - 无法从 onCreate 外部将数据设置为 MPAndroidChart
- javascript - 使用react js的渲染功能时出错