小明很喜歡數學,有一天他在做數學作業時,要求計算出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。現在把問題交給你,你能不能也很快的找出所有和...