2016-09-16 77 views
-2

的问题的解决方案,以一个行总和奇数方法:我需要了解在红宝石

从行索引计算该三角形的行总和。

row_sum_odd_numbers(1); # 1 
row_sum_odd_numbers(2); # 3 + 5 = 8 
row_sum_odd_numbers(3); # 7 + 9 + 11 = 27 

...

Test.assert_equals(row_sum_odd_numbers(1), 1) 

Test.assert_equals(row_sum_odd_numbers(2), 8) 

Test.assert_equals(row_sum_odd_numbers(13), 2197) 

Test.assert_equals(row_sum_odd_numbers(19), 6859) 

Test.assert_equals(row_sum_odd_numbers(41), 68921) 

的解决问题的办法如下:

def row_sum_odd_numbers(n) 
    return n**3 
end 

我明白,这代码返回答案。我不明白它是如何返回答案的。为什么n的第3个指数返回奇数的行和?

+0

这只是一个数学技巧。它不能解释,但你可以得到的模式! –

+1

这可能有助于显示三角形和/或问题定义。三角形的特质使它解决了这个简单的问题。也许这个问题可以适用于maths.stackexchange,如果从三角形的设计中得到n ** 3似乎是模糊的。 –

+4

我投票结束这个问题作为题外话题,因为它是关于数学,而不是编程。 –

回答

2

这只是数学计算:)

可以找出哪些是第一个被加数: 第一加数之前,我们有1 + 2 + 3 + ... + n-1奇数,其金额为((n-1)*n)/2。所以,在他们之后的第一个加载是
((n-1)*n)/2 * 2 + 1 = (n-1)*n + 1

现在我们应该只计算我们的总和:
row_sum_odd_numbers(n)= (n-1)*n + 1 + (n-1)*n + 3 + (n-1)*n + 5 +...+ (n-1)*n + 2*n - 1 =
(n-1)*n*n + 1 + 3 + 5 + ... + 2*n -1 = n^3 - n^2 + n^2 = n^3

+0

请格式化以提高可读性。它将帮助OP和那些正在寻找类似解决方案的人。 –

0

首先,需要计算第k行开头的数字。如果你画的三角形,就不难认识到,这是

1 + \sum_{j=1}^{k-1}2*j = 
         = 1 + (2 + ... + 2*(k-1)) 
         = 1 + (2 + 2(k-1))/2*(k-1) 
         = k^2 - k + 1 

三角形的相应的行数的总和就等于k号开始k^2 - k + 12增量的总和。这样的结果是

k*(k^2 - k + 1 + k^2 - k + 1 + (k-1)*2)/2 = k*k^2 = k^3 
1

行N前有1+2+..+(n-1)奇数。由于这是一个等差级数的元素的总和,它总计因此

n(n-1)/2 

的第一个号码在n行是第n(n-1)/2 + 1奇数。

n第奇数是

2n - 1 

所以在n行第一(奇数)数是

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

使用该结果,在n行的最后一个(奇数)数目等于第n+1行减去2。因此

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

nn奇数(形成代数进展)的总和是

n(n(n-1) + 1 + n(n+1) - 1)/2 = n^3 

证明的断言。