和為S的連續正數序列

2021-09-26 14:15:19 字數 1151 閱讀 5090

小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和為s的連續正數序列? good luck!

輸出所有和為s的連續正數序列。序列內按照從小至大的順序,序列間按照開始數字從小到大的順序
這個是個純公式題,也可以採取暴力法解決,

公式如下:

設連續數列長度為n

開始節點為a

結束節點為b

那麼由等差公式得

(a + b)/ 2 * n = sum =》 (a + b) * n = sum * 2

又因為b - a = n -1

(a + b) * n = sum * 2

所以有兩個方程,三個未知數

只要我們遍歷n的值去試探方程的整數解即可得出a和b的值

例如 sum = 100

n = 2時,b - a = 1  , a + b = 100  a, b沒有正整數解,所以不符合要求跳過

n = 8時,b - a = 7,   a +  b = 25   a = 9  b =16 即 9- 16連續子串的和為100

實現如下:

#pragma once

#include using namespace std;

namespace sum_100_number

else

vv.push_back(v);}}

}return vv;}};

}

test.cpp

#pragma once

#include "sum_100_number.h"

namespace sum_100_number

}

二、其他解法

還有一種思路,就是雙指標,組成乙個滑動視窗,初始化時,pow 和 high滑動視窗為0,1,如果和小於那麼sum

high++,繼續計算和,如果大於sum那麼pow++,直到和等於sum,再找下乙個。

可能這為正解,不然為何公式法要逆序查詢

和為S的連續正數序列

題目描述 小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的...

和為S的連續正數序列

小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和...

和為S的連續正數序列

小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和...