所有数字的总和

时间:2012-10-11 17:10:22

标签: python

我需要编写一个计算所有数字之和的函数。

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值进行计算?

为清楚起见,这不是作业。这是在最近的一个中期,不用说,我很难过。

6 个答案:

答案 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))