6 連續序列和為s

2021-09-06 15:55:31 字數 731 閱讀 1659

題目:輸入乙個整數s,列印出全部和為s的連續整數序列(至少含有2個數)。比如輸入9,則輸出2、3、4和4、5兩個序列

方案一:因為序列至少要2個數,則兩個數上限值為(1+s)/2,我們能夠列舉該序列的起點和終點求全部滿足的序列。時間複雜度為o(n^2),效率比較低

方案二:我們設定兩個指標start和end分別表示當前序列的起點和終點,並記序列和為sum。當sum = s的時候輸出這個序列,而且end往後移動一位;假設sum > s,則start往後移動一位;假設sum < s,則end要往後移動一位。

直到start < (1+s)/2結束迴圈,時間複雜度o(n),效率非常高

#include#include#include#includeusing namespace std;

//列印序列

void printnum(int start, int end)

printf("\n");

}//找到兩個數和為s

void findsequencesum(int s)

int start = 1;

int end = 2;

int sum = 3;

int mid = (1+s)>>1;

//迴圈找到全部的序列

while(start < mid)

else if(sum > s)

else }}

int main()

和為S的連續正數序列

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

和為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初始化為2....

和為S的連續正數序列

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