博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer(41)和为S的连续正数序列
阅读量:4964 次
发布时间:2019-06-12

本文共 943 字,大约阅读时间需要 3 分钟。

题目描述

小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

输出描述:

输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

 

题目分析

假设序列的开始数字为a,结束数字为a+i,那么有(a+i-a+1)*(a+a+i)/2=sum

也就是(i+1)*(2*a+i)=2*sum

那么我们只需要找出这样的a和i就行了,最后再根据a和i得出序列。

 

代码

function FindContinuousSequence(sum) {  let a = 0,    half = sum >> 1;  const res = [];  while (half--) {    a++;    let i = 1;    while ((i + 1) * (2 * a + i) < 2 * sum) {      i++;    }    if ((i + 1) * (2 * a + i) === 2 * sum) {      const tmp = [];      tmp.push(a);      tmp.push(i);      res.push(tmp);    }  }  for (let i = 0; i < res.length; i++) {    let num = res[i][1],      k = 1;    const tmp = [];    tmp.push(res[i][0]);    while (num--) {      tmp.push(res[i][0] + k);      k++;    }    res[i] = tmp;  }  return res;}

 

转载于:https://www.cnblogs.com/wuguanglin/p/FindContinuousSequence.html

你可能感兴趣的文章
秋季学期学习总结
查看>>
SpringBoot 优化内嵌的Tomcat
查看>>
【LaTeX】E喵的LaTeX新手入门教程(1)准备篇
查看>>
highcharts曲线图
查看>>
extjs动态改变样式
查看>>
PL/SQL Developer 查询的数据有乱码或者where 字段名=字段值 查不出来数据
查看>>
宏定义
查看>>
ubuntu12.04 串口登录系统配置
查看>>
笔记:git基本操作
查看>>
生成php所需要的APNS Service pem证书的步骤
查看>>
JavaWeb之JSON
查看>>
HOT SUMMER 每天都是不一样,积极的去感受生活 C#关闭IE相应的窗口 .
查看>>
windows平台上编译mongdb-cxx-driver
查看>>
optionMenu-普通菜单使用
查看>>
MVC3分页传2参
查看>>
2016-2017-2点集拓扑作业[本科生上课时]讲解视频
查看>>
appium(13)- server config
查看>>
IIS负载均衡-Application Request Route详解第六篇:使用失败请求跟踪规则来诊断ARR...
查看>>
管理信息系统 第三部分 作业
查看>>
[Leetcode Week13]Search a 2D Matrix
查看>>