当前位置:   article > 正文

华为OD 面试手撕代码真题【判断一个数能否分解为几个连续自然数之和】_华为od手撕代码题目

华为od手撕代码题目

判断一个数能否分解为几个连续自然数之和

       这个题的小伙伴反馈面试官直接口述题目,然后在自己的IDE里面写题目,不用提交,直接看逻辑就完事儿了。

        其实也是,这个题目考的就是数学知识,只要逻辑清晰,也不用验证正确率。

数学分析过程:

1:如果是奇数,肯定能分解成至少两数相加的模式。,比如 3 = 1+2

2:如果是偶数:

假设一个数num能被分解为n个以a为开头的数之和,则必然满足下公式:

M=a+(a+1)+(a+2)+…+(a+n-1)=n*a+n*(n-1)/2;

要求a!=0,否则就是以a+1开头的连续n-1个整数了,也就是要求(M-(n+n*(n-1)/2))%n==0,即(M-(n*(n-1)/2))%n==0,这样就很容易判断一个数可不可以写成连续n个自然数的形式了,遍历n=2…sqrt(M)*2,还可以输出所有解。

        总结下来其实就是不要紧张,核心就在于几个连续自然数之和,大家都学过1~n的整数相加的公式,自然可以联想一下,最后整理出合理的公式。

  1. void divide(int num){
  2. int i,j,a;
  3. for(i 
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/555050
推荐阅读
相关标签
  

闽ICP备14008679号