为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

青春有我 2021-09-11 16:39:46
基本上,用户输入任何正数,然后程序应该排列一个列表,该列表包含直到输入数字的所有正数,以便列表中的 2 个连续元素的总和是一个平方数。如果输入的数字不允许进行排序,我只希望程序打印错误。这是到目前为止的代码:u = int(input("ENTER: "))l = []for i in range(1, u + 1):    l.append(i)o = lt = []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]在此先感谢您的任何帮助。
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

这将是一种具有递归函数的蛮力方法:


import math


def 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 result


n = 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 4

Input: [1, 2, 3, 4]

Output: False

15 的例子:


Arrange numbers from 1 to 15

Input: [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]


查看完整回答
反对 回复 2021-09-11
  • 3 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信