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

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

線路排列問題。(有人可以提出一個更省時的解決方案嗎?)

線路排列問題。(有人可以提出一個更省時的解決方案嗎?)

不負相思意 2023-07-18 09:39:29
從 1 開始的正整數按行排列。第 i 行有 i 個數字。例如,前四行是:1 | 2, 3 | 4, 5, 6 |7, 8, 9, 10編寫一個函數,它接受參數“L”并返回此排列的第 L 行。這是我的方法:def find_line(l):    array = []    x = 1    for i in range(1, l + 1):        while len(array) != I:            array.append(x)            x += 1             if i == l:                return array            else:                array = []
查看完整描述

3 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

你不需要循環。您可以通過對系列進行求和來直接計算組中的第一個數字:


start =  1 + (n * (n + 1)) // 2

如果您希望 n 從 開始,1而不是0需要從 n 中減去。


def group(n):

    n -= 1

    start =  1 + (n * (n + 1)) // 2

    return list(range(start, start + n +1))


# try it on first 10 numbers: 

for i in range(1, 10):

    print(group(i))

這將打印:


[1]

[2, 3]

[4, 5, 6]

[7, 8, 9, 10]

[11, 12, 13, 14, 15]

[16, 17, 18, 19, 20, 21]

[22, 23, 24, 25, 26, 27, 28]

[29, 30, 31, 32, 33, 34, 35, 36]

[37, 38, 39, 40, 41, 42, 43, 44, 45]

join如果需要字符串,可以使用或類似的。


查看完整回答
反對 回復 2023-07-18
?
UYOU

TA貢獻1878條經驗 獲得超4個贊

好吧,我想展示它背后的數學原理。讓我們計算行號 n 的最后一項的表達式。


1 |   2  |    3    |      4     | .....line numbers

--+------+---------+------------+------

1 | 2, 3 | 4, 5, 6 | 7, 8, 9, 10| .....values

對于 n=1 (即行號 1),last=1 所以 last(1) = 1。

現在讓我們說last(n)表示第 n 行的最后一個值,然后: -

last(n) = last(n-1) + n

例如,對于第 4 行,n=4,我們有

last(4) = last(3) + 4 = 6 + 4 因此,展開遞歸,我們有:-


last(n) = last(n-1) + n

        = (last(n-2) + n-1) + n

        = last(1) + 2 + 3 + ....+ n-1 + n

        = 1 + 2 + 3 + ....+ n-1 + n

        = n*(n+1)/2


Thus, 


last(n) = n*(n+1)/2

由于第 n 行有 n 個值,因此我們可以從第 n 行開始:-


start(n) = last(n) - n + 1

OR

start(n) = n*(n-1)/2 + 1

或者,您也可以將 start(n) 設為:-


start(n) = start(n-1) + n-1

         = start(n-2) + n-2 + n-1

         = start(1) + 1 + 2 + 3 + ....+ n-2 + n-1

         = 1 + (1 + 2 + 3 + ... + n-2 + n-1)

         = 1 + (n-1)*n/2

start(n) = n*(n-1)/2 + 1

休息一下就可以循環運行了


loop from i=0 to i=n-1 :

     print( start(n) + i )


查看完整回答
反對 回復 2023-07-18
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

def find_line(l):

  starting_num = 1

  res = []

  for count in range (l):

   starting_num += count


   res = list(range(starting_num, starting_num+l))


  return res

測試 l=5 的函數:


print(find_line(5))

[11, 12, 13, 14, 15]


查看完整回答
反對 回復 2023-07-18
  • 3 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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