一串数字的和 = 平均值 * 数字个数
和为S的连续正数序列
http://www.nowcoder.com/questionTerminal/c451a3fd84b64cb19485dad758a55ebe
一串数字的和 = 平均值 * 数字个数;
连续数字的平均值分为两种情况:
- 奇数个数字:中位数、(整数)
- 偶数个数字:中间两个数的平均 (xx.5)
所以我们要找的就是:符合条件的平均值和数字个数:
- 平均值为整数,数字个数必定为奇数
- 平均值为xx.5, 数字个数必定为偶数
假设刚开始有i(0~sum)个数字,所以平均值为: sum/i,找到符合条件的,然后根据平均值和数字个数生成一串数字就好了
JavaScript:
function FindContinuousSequence(sum) { const res = [] for(let i=2; i<sum; i++){ const mid = sum/i; // mid为结果中间的数字,i是一共有几个数字 if(mid - i/2 <= 0) break; // 开头的数字小于0,就不对了 // mid为整数的时候i必须是奇数,mid为.5的时候,i必须是偶数 if((mid%1 === 0 && i%2 === 1) || (mid%1 === 0.5 && i%2 === 0)){ res.unshift(createNums(mid, i)) } } return res } function createNums(mid, count){ let arr = []; let i=0; if(count%2 === 1){ i=1; arr.push(mid) }else{ i=0.5 } for(; i< Math.ceil(count/2); i++){ arr.push(mid+i) arr.unshift(mid-i) } return arr }