牛客网-和为s的连续正数序列

这是一篇关于算法的博客,讲述了如何找到所有和为S的连续正数序列。小明通过数学作业中求9~16的和引发思考,寻求所有连续序列和为100的解。博主分享了利用公式s = (low + high)*(high-low+1)/2进行求解的方法,通过设定low和high并遍历,将符合条件的序列存入数组。解题代码可在github仓库中查看。
摘要由CSDN通过智能技术生成

题目描述:

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

输出描述:

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

代码总结在github仓库:

https://github.com/Rayholle/LeetCode-Newcoder/blob/master/STL/和为s的连续整数序列.cpp

解题思路:

根据公式:s = (low + high)*(high-low+1)/2(普通的求和公式,low为最小值,high为最大值)

我们需要做的就是设置low,high,并遍历所有连续的整数(限定条件:low<high)

代码如下:

vector<vector<int> > FindContinuousSequence(int sum) {
        int plow = 1;
        int phigh = 2;
        vector<vector<int>> ret;
        while(plow < phigh){
            int cur = (plow+phigh)*(phigh-plow+1)/2;//求和公式计算当前和
            if(cur < sum)//若小于sum,则phigh++
                phigh++;
            if(cur == sum){
                vector<int> temp;
                for(int i = plow; i<= phigh; i++){
                    temp.push_back(i);
                }
                ret.push_back(temp);
                plow++;
            }
            if(cur > sum)//若大于sum,则plow++
                plow++;
        }
        return ret;
    }

 

    在遍历过程中,符合要求的plow-phigh之间的数值,存入数组向量中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值