[Haskell] CodeWars|Sum of odd numbers

来源:互联网 发布:淘宝二类医疗器械备案 编辑:程序博客网 时间:2024/06/05 21:18

https://www.codewars.com/kata/55fd2d567d94ac3bc9000064/haskell

题目

Given the triangle of consecutive odd numbers:

             1          3     5       7     9    11   13    15    17    1921    23    25    27    29            ...

Calculate the row sums of this triangle from the row index (starting at index 1) e.g.:

rowSumOddNumbers 1 -- 1rowSumOddNumbers 2 -- 3 + 5 = 8

题解

  1. 无脑方法
    我们看到,每一行的第一个数字序列是:[1,3,7,13,21..]。也就是差为[2,4,6,8..],然后每行数字减去每行第一个数字后为:[0,2,4..],然后就可以得到我们的算式了:
rowSumOddNumbers :: Integer -> IntegerrowSumOddNumbers n = n * (1 + n * (n - 1)) + n * (n - 1)
  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(n1))+n(n1)=n+n2(n1)+n(n1)=n+n3n2+n2n=n3
    然后。。
rowSumOddNumbers :: Integer -> IntegerrowSumOddNumbers = (^ 3)
原创粉丝点击