【发布时间】:2016-01-01 08:30:54
【问题描述】:
这是我目前所拥有的,但如果我超过前一个数字的正负 11,它就会中断。因此,如果前一个数字是 1,则下一个数字必须大于 16。另外我尝试只使用每个数字一次。
示例输出:
[3,45, 1, 16, 33, 3, 23.....]
到目前为止,我的脚本是:
import random
new_array=[]
counter = 0
array=range(51)
array=array[1:51]
while len(new_array)<50:
y=random.choice(array)
if y not in new_array and counter!=0 and y not in (range(new_array[counter-1]-11,new_array[counter-1]+11)):
new_array.append(y)
counter+=1
elif counter == 0:
new_array.append(y)
counter+=1
else:
pass
【问题讨论】:
-
提示:不要玩
range(),只需将两个数字相减即可。 -
您的算法的有趣问题是它的执行时间没有限制。如果运气不好,可能需要 42 年才能执行。
-
问题实际上比看起来要复杂得多。我所做的尝试忘记了每个数字只能选择一次这一事实。仅此约束就不可能一次性解决。
-
这真是一个脑筋急转弯。在这一点上,我最好的想法需要评估最坏的〜10 ^ 32个案例。我想知道如何将这个数字减少到合理的程度。
-
我认为解决该问题的另一种方法是将 50 个数字划分为子列表,您只能将 50 个数字排列这么多种方式,以使连续数字之间至少有 16 个差异