博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
和为S的连续正数序列
阅读量:4144 次
发布时间:2019-05-25

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

题目描述

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

输出描述:

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

本题与类似。

思路:都是利用滑动窗口的思想。

根据题目,为连续正数,所以可以利用连续正整数的求和公式 subSum=(left+right)*(right-left+1)/2;

循环截止条件为左窗口边界到达sum的中间位置,例如题目中sum=100,则left<50,因为左边界为50,下一项为51,肯定大于100了。

import java.util.ArrayList;public static ArrayList
> findContinuousSequence(int sum) { ArrayList
> lists =new ArrayList
>(); int left=1; int right=1; int subSum=0; while(left<(sum+1)/2) { subSum=(left+right)*(right-left+1)/2; if(subSum==sum) { ArrayList
list = new ArrayList
(); for(int i=left;i<=right;i++) list.add(i); left++; right++; lists.add(list); }else if(subSum

转载地址:http://mhbti.baihongyu.com/

你可能感兴趣的文章
Qt实现简单延时
查看>>
qml有关矩形说明
查看>>
在qt中使用QSplitter设置初始比例setStretchFactor失效的解决方法
查看>>
repeater的使用
查看>>
qt msvc编译中文乱码解决
查看>>
qt实现点击出现窗口,点击其他任何地方窗口消失
查看>>
QML DropArea拖拉文件事件
查看>>
CORBA links
查看>>
读后感:&gt;
查看>>
ideas about sharing software
查看>>
different aspects for software
查看>>
To do list
查看>>
Study of Source code
查看>>
如何使用BBC英语学习频道
查看>>
spring事务探索
查看>>
浅谈Spring声明式事务管理ThreadLocal和JDKProxy
查看>>
初识xsd
查看>>
java 设计模式-职责型模式
查看>>
构造型模式
查看>>
svn out of date 无法更新到最新版本
查看>>