繁体   English   中英

有什么方法可以将数字范围放入列表中,使每个数字的差异大于 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM