![](/img/trans.png)
[英]The fastest way to find all pairs of numbers in a list that differ not more than x
[英]Is there any way to put range of numbers in a list that the difference of each number is more than x?
我正在编写一个代码来接受两个输入 n 和 k。 n 是我们数字的最大范围。 k 是我们想要用来将 n 个数字放在一起的最小值。 看不懂的请注意: 代码得到两个输入n和k:
n, k = [int(a) for a in input().split()]
例如 n = 5 和 k = 2。我想对从 1 到 5(n) 的数字进行排序,它们每两个之间的差异等于大于 2(k),如果条件不适合我们的 n打印“不可能”。 例如,如果 n = 2 和 k = 2,那么它们的差无论如何都将小于 2(k)。
我写了这个:
n, k = [int(a) for a in input().split()]
list = []
for i in range(n+1, 1):
if i - (i-2) >= k:
list.append(i)
print(list)
elif n <= k:
print("Impossible")
我想要的是:例如,如果 n = 5 和 k = 2,则 output 应该是:
1 4 2 5 3
对于 n = 2 和 k = 2:
Impossible
但它不起作用我很困惑是否有任何 function 或任何可以帮助我的东西?
您的代码“不起作用”,因为您的if
语句没有做任何有用的事情:
if i - (i-2) >= k:
做代数来简化这个:
if 2 >= k:
这只是多次测试输入值。
用铅笔和纸工作一点。 你如何安排从 1 到 n 的数字,使得最小的差异将尽可能大? 查看您之前发布的示例:那里的模式是什么? 将其扩展为 8 和 9 个数字。
找到那个模式。 那个通用解决方案将在可能的情况下立即引导您找到解决方案,而其他一切都是“不可能的”。
另一种可能性是尝试所有可能的安排(使用itertools.permutation
)并检查所有安排以获得解决方案。
三是产生解决方案,走投无路回溯。 这需要一些额外的工作来学习递归,或者通过迭代获得相同的效果。
这会让你前进吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.