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

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

题目描述

小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 
输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序 思路:(普通方法)两个指针,一个指向前边,一个指向后边,从前加到后的值小于给定的值,则end后移,同时累加和加上新加入的数据。若累加值大于给定的值那么 start后移,同时累加和减去之前的start 若等于 则new一个 arraylist 从start到end  add一遍,再add进总的arraylist里面。 之所以不从头到尾维护一个arraylist,是因为当把这个arraylist  add到大的arraylist里面时是按引用 传递的。 所以只是在找start和end  找到了就新new一个arraylist出来放进总的arraylist里面 (数学思路)(An+Am)(An-Am+1)/2=sum;  把An+Am看做一个变量,把An-Am+1(大于等于2)看做一个变量,这个遍历(An+Am)的值,求An-Am+1的值,对应求出An和Am。 上第一种思路的代码
import java.util.ArrayList;public class Solution {    public ArrayList
> FindContinuousSequence(int sum) { ArrayList
> ans=new ArrayList
>(); if(sum<3) return ans; int start=1,end=2,allsum=3; while(end
sum) allsum-=start++; else{ ArrayList
anstemp=new ArrayList
(); for(int i=start;i<=end;i++) anstemp.add(i); ans.add(anstemp); allsum-=start++; allsum+=++end; } } return ans; }}

 

 

转载于:https://www.cnblogs.com/tobemaster/p/5925371.html

你可能感兴趣的文章
10.IPSec×××高可用性技术-链路备份
查看>>
我的友情链接
查看>>
destoon 读取当前栏目名称
查看>>
HTC推出革新的HTC旗舰级Android智能手机
查看>>
switch&router-四层模式
查看>>
新博安卓培训的第一天
查看>>
游戏中常用到的碰撞检测帮助类
查看>>
访问默认共享
查看>>
01262015要看的blog——oracle tuning
查看>>
[信息图]电子商务营销的6大步骤
查看>>
Hibernate注释大全收藏
查看>>
通过openfiler模拟存储
查看>>
java学习笔记 --- String类
查看>>
1.5-cut命令
查看>>
我的友情链接
查看>>
从技术角度看人与人的沟通
查看>>
加速sshd
查看>>
15.3、SElinux介绍
查看>>
关于Nagios Core
查看>>
python基本数据类型的介绍
查看>>