[Haskell] CodeWars|Sum of odd numbers

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. 无脑方法
    我们看到,每一行的第一个数字序列是:[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)
  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 -> Integer
rowSumOddNumbers = (^ 3)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值