題目:輸入乙個整數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。現在把問題交給你,你能不能也很快的找出所有和...