【发布时间】:2019-05-10 12:03:59
【问题描述】:
基本上,用户输入任何正数,然后程序应该安排一个列表,其中包含直到输入的数字的所有正数,以便列表中 2 个连续元素的总和是一个平方数。如果输入的数字不允许排序,我只想让程序打印错误。这是到目前为止的代码:
u = int(input("ENTER: "))
l = []
for i in range(1, u + 1):
l.append(i)
o = l
t = []
for elem in l:
for x in o:
p = elem + x
p = math.sqrt(p)
if p%1 == 0:
if x == elem:
break
else:
t.append(x)
t.append(elem)
例如,如果我输入 15,那么列表 t 最终看起来像这样:
[3, 1, 8, 1, 15, 1, 1, 3, 6, 3, 13, 3, 5, 4, 12, 4, 4, 5, 11, 5, 3, 6, 10, 6, 2, 7, 9, 7, 1, 8, 7, 9, 6, 10, 15, 10, 5, 11, 14, 11, 4, 12, 13, 12, 3, 13, 12, 13, 2, 14, 11, 14, 1, 15, 10, 15]
该列表包含理论上可行的所有对,我坚持安排此列表,以便每个数字出现一次,并且每个连续数字都遵循上述属性。
所以我最终要寻找的列表是这样的:
[8, 1, 15, 10, 6, 3, 13, 12, 4, 5, 11, 14, 2, 7, 9]
提前感谢您的任何帮助。
【问题讨论】:
-
你了解图论或寻路吗?您成功地找到了数字之间的所有联系——现在您需要找到使用这些联系的“最大路径”。搜索并了解这些主题。
-
感谢您接受我的回答,但我对此感觉不对。我的回答是基于 Jayjayyy 的:主要想法是他(或她)的,而我的更改提高了速度但仍然相对较小。他激励我仔细研究这个问题,我的目的是回馈社区,而不是剥夺他的利益。我以前解决过类似的问题,但他的方法比我的好。请接受他的回答而不是我的回答。
标签: python list function math list-comprehension