我需要了解ruby中行和奇数方法的解决方案

时间:2016-09-16 13:50:45

标签: ruby algorithm math

问题:

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

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个指数返回奇数的行和?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

因此n行中n奇数的总和(形成代数级数)

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

证明断言。

答案 2 :(得分:0)

首先,需要计算using (IResourceWriter writer = new ResXResourceWriter(file)) { foreach (KeyValuePair<string, string> item in dictionary) writer.AddResource(item.Key, item.Value); } 行开头的数字。如果你绘制三角形,不难发现这是

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开头,增量为{​​{1}}。因此结果是

k^2 - k + 1