【问题标题】:Is there any way to put range of numbers in a list that the difference of each number is more than x?有没有办法将数字范围放入一个列表中,每个数字的差异大于 x?
【发布时间】:2020-10-09 22:57:01
【问题描述】:

我正在编写一个代码来获取两个输入 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, 输出应该是:

1 4 2 5 3

对于 n = 2 和 k = 2:

Impossible

但它不起作用我很困惑,有什么功能或任何东西可以帮助我吗?

【问题讨论】:

标签: python python-3.x list algorithm for-loop


【解决方案1】:

您的代码“不起作用”,因为您的 if 语句没有做任何有用的事情:

if i - (i-2) >= k:

做代数来简化这个:

if 2 >= k:

这只是多次测试输入值。

暂时使用铅笔和纸。您如何排列从 1 到 n 的数字,以使 最小 差异尽可能大?看看您之前发布的示例:那里的模式是什么?将其扩展为 8 和 9 个数字。

找到那个模式。这个通用解决方案会在可能的情况下立即引导您找到解决方案,而对于其他所有解决方案都是“不可能的”。

另一种可能性是尝试所有可能的安排(使用itertools.permutation)并检查所有可能的解决方案。

第三是产生解决方案,当你遇到死胡同时回溯。这需要一些额外的工作来学习递归,或者通过迭代获得相同的效果。

这能让你继续前进吗?

【讨论】:

  • 你能给我举一个 itertools.permutations 是如何工作的例子吗?
  • 能给我一个 itertools.permutations 的例子吗??
  • 查找教程信息是您的责任。请重复intro tour。 Stack Overflow 并非旨在替代现有教程。
猜你喜欢
  • 1970-01-01
  • 2019-12-19
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多