亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我需要以特定方式排列我的列表 - 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條經驗 獲得超5個贊

這將是一種具有遞歸函數的蠻力方法:


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 關注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號