面試題40 輸出和為指定值的連續正數序列

2021-06-17 00:45:02 字數 1167 閱讀 3071

思路:

1.用兩個變數分別表示序列的最小值和最大值

。首先把他們分別初始化為1和2,

2.如果從最小值到最大值的序列之和大於

給定值,則從序列中去掉最小值,也就是增大最小值;

3.如果從最小值到最大值的序列之和小於

給定值,則增大最大值,讓序列包含更多的數字

4.由於序列中至少有兩個數字,我們一直增加最小值到(1+給定值)/2為止

**如下:

#include "stdafx.h"

#include using namespace std;

//列印滿足要求的連續正數序列,nsmall和nbig分別表示序列的最小值和最大值

void printsequence(int nsmall, int nbig)

cout << endl;

}void findcontinoussequence(int nsum)

int nsmall = 1;

int nbig = 2;

int nmid = (nsum + 1) >> 1;

int ncursum = nsmall + nbig;

while (nsmall < nmid)//迴圈終止條件

while (ncursum > nsum && nsmall < nmid)//當前和比指定值大

}//當前和比指定值小

nbig++;//增大最大值

ncursum += nbig;//更新當前和

} }int _tmain(int argc, _tchar* argv)

執行結果:

和為指定值的連續序列

輸入乙個整數s,列印出所有和為s的連續正整數序列 至少包含兩個數 例如,對於輸入15,由於有1 2 3 4 5 15,4 5 6 15,7 8 15,所以列印出1 5 4 6 7 8三個序列。有個比較好的做法是利用等差數列求和公式 s a n n n 1 2。這裡的a是第乙個元素,n是項數。int ...

面試題 和為 n 連續正數序列

題目 輸入乙個正數 n,輸出所有和為 n連續正數序列。例如輸入 15,由於 1 2 3 4 5 4 5 6 7 8 15,所以輸出 3 個連續序列 1 5 4 6和 7 8。方法一 首先判斷n最多能由幾個連續數的和得到,假設最多由m個連續數和得到,那麼m m 1 2 n這樣很容易求得 m sqrt ...

面試題 和為s的連續正數序列

輸入乙個正數s,列印出所有和為s的連續正數序列 至少含有兩個數 例如,輸入15,由於1 2 3 4 5 4 5 6 7 8 15,所以列印出3個連續序列1 5 4 6和7 8。思路 依舊雙指標套路 void findcontinuoussequence int sum if sum 3 return...