赞
踩
判断一个数能否分解为几个连续自然数之和
这个题的小伙伴反馈面试官直接口述题目,然后在自己的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的整数相加的公式,自然可以联想一下,最后整理出合理的公式。
- void divide(int num){
- int i,j,a;
- for(i
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。