我需要以特定方式排列我的列表 - python

基本上,用户输入任何正数,然后程序应该排列一个列表,该列表包含直到输入数字的所有正数,以便列表中的 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]

在此先感谢您的任何帮助。


青春有我
浏览 158回答 3
3回答

收到一只叮咚

这将是一种具有递归函数的蛮力方法:import mathdef f(temp, numbers):    for i, j in zip(temp[:-1], temp[1:]):        sqrt = math.sqrt(i+j)        if int(sqrt) != sqrt:            return False    if not numbers:        return temp    for i in numbers:        result = f(temp + [i], [j for j in numbers if j != i])        if result:            break    return resultn = int(input("Arrange numbers from 1 to ").strip())numbers = list(range(1, n+1))print("Input:", numbers)print("Output:", f([], numbers))示例 4:Arrange numbers from 1 to 4Input: [1, 2, 3, 4]Output: False15 的例子:Arrange numbers from 1 to 15Input: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]Output: [8, 1, 15, 10, 6, 3, 13, 12, 4, 5, 11, 14, 2, 7, 9]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python