用等差数列求和公式计算

和为S的连续正数序列

http://www.nowcoder.com/questionTerminal/c451a3fd84b64cb19485dad758a55ebe

用等差数列求和公式计算,将问题转换为求取初值,数组范围为2到sqrt(2*sum)

class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {</int>

    vector<vector<int>> res;

    if (sum <= 0)
        return res;

    int n = sqrt(2*sum);
    int ao;
    double ao_o;
    for ( ; n>=2 ; n--)
    {
        ao_o = 1.0*sum - 0.5*n*(n-1);
        ao_o /= (1.0*n);

        if (fabs(ao_o-int(ao_o)) < 1e-5)
        {
            vector<int> ires;
            ao = int(ao_o);
            for (int i=0; i<n; i++)
            {
                ires.push_back(ao + i);
            }

            res.push_back(ires);
        }
    }


    return res;
}

};

全部评论

相关推荐

kl_我是东山啊:《相关公司:阿里巴巴》
投递阿里巴巴等公司10个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务