时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32M,其他语言64M
热度指数:406490
本题知识点: 穷举
题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
输出描述
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
代码
function FindContinuousSequence(sum)
{
if(sum === 0 || sum === 1) {return [];}
let count = 0;
let arr = [];
let res = [];
for(let i=1; i<=Math.ceil(sum/2); i++){
count += i;
arr.push(i);
if(count > sum){
while(count > sum){
count -= arr.shift();
}
}
if(count === sum){
let ans = [];
for(let j=0; j<arr.length; j++){
ans.push(arr[j]);
}
res.push(ans);
}
}
return res;
}
分析:
arr.shift():删除并返回数组arr的第一个元素