https://www.codewars.com/kata/55fd2d567d94ac3bc9000064/haskell
题目
Given the triangle of consecutive odd numbers:
1
3 5
7 9 11
13 15 17 19
21 23 25 27 29
...
Calculate the row sums of this triangle from the row index (starting at index 1) e.g.:
rowSumOddNumbers 1 -- 1
rowSumOddNumbers 2 -- 3 + 5 = 8
题解
- 无脑方法
我们看到,每一行的第一个数字序列是:[1,3,7,13,21..]
。也就是差为[2,4,6,8..]
,然后每行数字减去每行第一个数字后为:[0,2,4..]
,然后就可以得到我们的算式了:
rowSumOddNumbers :: Integer -> Integer
rowSumOddNumbers n = n * (1 + n * (n - 1)) + n * (n - 1)
- ???
我们在GHCi中调用map rowSumOddNumbers [1,2..]
结果是:
[1,8,27,64,125,216,343,512,729,1000,1331,1728,2197,2744,3375,4096,4913,5832,6859,8000..]
,发现规律。。。 fn=n3 (啪!)我们化简算式:
fn=n(1+n(n−1))+n(n−1)=n+n2(n−1)+n(n−1)=n+n3−n2+n2−n=n3
然后。。
rowSumOddNumbers :: Integer -> Integer
rowSumOddNumbers = (^ 3)