劍指Offer 和為s的連續正數序列

2021-08-13 11:46:17 字數 795 閱讀 6832

【題目】

輸入乙個正數s,列印出所有和為s的連續正數序列(至少包含兩個數)。例如,輸入15,由於1+2+3+4+5=4+5+6=7+8=15,所以列印出3個連續序列1~5,4~6,7~8。

【基本思路】

使用兩個指標small和big,small表示連續序列的首元素,big表示連續序列的尾元素,初始時small = 1,big = 2。此時序列的累加和total = 3。如果累加和小於s,則擴大序列,即big指標向右移動一位,調整total後繼續和s比較;如果累加和大於s,則縮小序列,即small指標向右移動一位,調整total後繼續和s比較。不斷的擴大或縮小序列,直到累加和等於s,此時列印該序列,然後令small加1繼續調整序列尋找下乙個序列。

由於序列中至少要包含兩個元素,所以,small的值增加到(1+s) / 2就停止。

【**實現】

class solution 

int small = 1;

int big = 2;

int mid = (1 + sum) / 2;

int total = 3;

while(small < mid)

else

if(total < sum)

else

array.push_back(arr);

total -= small;

small++;}}

return

array;

}};

劍指offer 和為S的連續正數序列

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

劍指offer 和為S的連續正數序列

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

劍指offer 和為 s 的連續正數序列

輸入乙個正數 s,列印出所有和為 s 的連續正數序列 至少兩個數 例如輸入 15,由於 1 2 3 4 5 4 5 6 7 8 15,所以結果打出 3 個連續序列 1 5 4 6 和 7 8。考慮用兩個數 small 和 big 分別表示序列的最小值和最大值。首先把 small 初始化為 1,big...