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

线路排列问题。(有人可以提出一个更省时的解决方案吗?)

线路排列问题。(有人可以提出一个更省时的解决方案吗?)

不负相思意 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 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

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