Codewars练习(1)——Sum of odd numbers?

每周写Codewars的宗旨:多刷Codewars,多虐自己一点点,每周提升多一点

个人觉得Codewars都做的还挺好的,就是在它那个页面写代码不自带缩进很难受,所以我运行成功的代码都复制到Vscode里面调整好再放到代码块里的
Codewars:Kata 7kyu——Sum of odd numbers?
题目要求:
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

C++编写:

long long rowSumOddNumbers(unsigned n){
    if(n == 1)  return 1;
    else
    {
        int m = n*(n-1)+1;
        int k = n/2;
        if(n%2 == 1)
        {
            return (m+k*2)*n;
        }
        else
        {
            return (m+n-1)*n;
        } 
    } 
} 

本来第一题我是打的Kata 6kyu——Is a number prime的,不过我真的是被虐的够惨,无论怎么打都是超时,没办法,第一个练个简单的,其实这道题要说难还是有一定的难度,要说简单也很简单,讲解一下我的思路:
思路:
这道题其实就类似于初高中的找规律求第几行第几个数是多少的题。不难看出其实每一行的和都可以是一个平均数乘上行数,那么我们要找到这个平均数是多少,只要知道该行的第一个数是多少就可以了。那么每行的第一个数就等于:行数×(行数-1)+1,也就是代码中的m = n*(n-1)+1;那么如果行数是奇数行,那么那个平均数大小就为:该行第一个数+(行数/2)×2,注意此处的(行数/2)的值是等于该运算所得值的整数部分,对应代码中的m+k*2;而如果行数是奇数,那么这个平均数大小就等于:该行第一个数+行数-1,对应代码中的m+n-1;那么最后将平均数乘上行数就是答案了。当然第一行是个例外,单独写出即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值