我需要编写一个计算所有数字之和的函数。
Row 1: 1
Row 2: 2 3
Row 3: 4 5 6
Row 4: 7 8 9 10
Row 5: 11 12 13 14 15
Row 6: 16 17 18 19 20 21
将上述行想象为“数字三角形”会有所帮助。该函数应采用数字n,表示要使用的数字和数量。第5行的总和是65.如何让我的函数对任何n值进行计算?
为清楚起见,这不是作业。这是在最近的一个中期,不用说,我很难过。
答案 0 :(得分:14)
第5列中最左边的数字是11 = (4+3+2+1)+1
,即sum(range(5))+1
。这通常适用于任何n
。
所以:
def triangle_sum(n):
start = sum(range(n))+1
return sum(range(start,start+n))
正如一群人所指出的,你可以将sum(range(n))
分析地表达为n*(n-1)//2
,这样可以通过以下方式更优雅地完成:
def triangle_sum(n):
start = n*(n-1)//2+1
return sum(range(start,start+n))
答案 1 :(得分:4)
使用方程式的解决方案,但是要达到那个方程需要做一些工作。
def sumRow(n):
return (n**3+n)/2
答案 2 :(得分:2)
数字1,3,6,10等被称为三角形数字并且具有明确的进展。只需计算两个边界三角形数字,使用range()
从两个三角形数字中获取相应行中的数字,然后使用sum()
。
答案 3 :(得分:0)
def sum_row(n):
final = n*(n+1)/2
start = final - n
return final*(final+1)/2 - start*(start+1)/2
或者
def sum_row(n):
final = n*(n+1)/2
return sum((final - i) for i in range(n))
它是如何运作的:
该函数的第一件事是计算每行的最后一个数字。对于n = 5,它返回15.为什么它有效?因为每行增加右边的数字除了行数;起初你有1个;然后1 + 2 = 3;然后3 + 3 = 6;然后6 + 4 = 10,ecc。这意味着您只需计算1 + 2 + 3 + .. + n,对于着名的公式,它等于n(n + 1)/ 2。
那么你可以将数字从最终数字加到最终数字 - n + 1(一个简单的for循环可以工作,或者像列表理解这样的花哨的东西) 或者将从1到最终的所有数字相加,然后减去从1到最终的数字之和 - n,就像我在显示的公式中所做的那样;你可以通过一些数学运算做得更好
答案 4 :(得分:0)
这是一个通用的解决方案:
start=1
n=5
for i in range(n):
start += len (range(i))
answer=sum(range(start,start+n))
作为一项功能:
def trio(n):
start=1
for i in range(n):
start += len (range(i))
answer=sum(range(start,start+n))
return answer
答案 5 :(得分:0)
def compute(n):
first = n * (n - 1) / 2 + 1
last = first + n - 1
return sum(xrange(first, last + 1))