题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
思路:
连续正数序列是公差为1 的数列,从序列的中间开始判断S/i
- 能整除 i , 且 i 是奇数的时候 必定存在和为n的序列
- 除以i之后得.5的结果 , 且 i 是偶数的时候 必定存在和为n的序列
function FindContinuousSequence(n)
{
let ret = [];
let array = [];
for(let i = 0;i <= n;i++){
array.push(i);
}
for(let i = parseInt(n / 2) + 1;i >= 2 ; i--){
let temp = n / i;
if(i % 2 === 1 && temp === parseInt(temp)){
let left = temp - (i - 1) / 2;
let right = temp + (i - 1) / 2;
if(left > 0){
let r = array.slice(left , right + 1);
ret.push(r);
}
}
if(i % 2 === 0 && temp !== parseInt(temp) && temp * 2 === parseInt(temp * 2)){
let left = parseInt(temp) - (i / 2 - 1);
let right = parseInt(temp) + i / 2;
if(left > 0){
let r = array.slice(left , right+ 1);
ret.push(r);
}
}
}
return ret;
}