51.和為 n 連續正數序列(陣列)。
題目:輸入乙個正數 n,輸出所有和為 n 連續正數序列。
例如輸入 15,由於 1+2+3+4+5=4+5+6=7+8=15,所以輸出 3 個連續序列 1-5、 4- 6 和 7-8。
分析:這是網易的一道面試題。
一道簡單的小題
/*51.和為 n 連續正數序列(陣列)。
題目:輸入乙個正數 n,輸出所有和為 n 連續正數序列。
例如輸入 15,由於 1+2+3+4+5=4+5+6=7+8=15,所以輸出 3 個連續序列 1-5、 4- 6 和 7-8。
分析:這是網易的一道面試題。
*/#include
//思路:設連續數字中首個數字為 s 連續數字個數為 l
//則這些數字的和為 s*l + l*(l-1)/2
void find(int
n) printf("\n
");}}}
}int
main()
網上看到乙個思路更好的, 其實沒有必要對s迴圈的,根據l直接算s就可以了。
那麼a1+a2+...+ak=n
因為連續,所以
a1+(a1+1)+(a1+2)+...+(a1+k-1)=n
即k*a1+k(k-1)/2=n
這樣就可以求得
a1=(n-k(k-1)/2)/k
a1即為連續數中的最小值,只有在a1為整數的情況下才會符合要求,即
(n-k(k-1)/2)%k==0
時才符合要求。
對符合要求的a1連續列印k個遞增(公差為1)的值即可。
#include #includeusing
namespace
std;
void sequence1(int
n) cout
<}
}}
和為n連續正數序列
51.和為n連續正數序列。題目 輸入乙個正數n,輸出所有和為n連續正數序列。例如輸入15,由於1 2 3 4 5 4 5 6 7 8 15,所以輸出3個連續序列1 5 4 6和7 8。分析 這是網易的一道面試題。這個題目出自微軟等資料結構 演算法面試100題 在devc 中編譯通過 name aut...
和為n連續正數序列
題目 輸入乙個正數n,輸出所有和為n連續正數序列。例如輸入15,由於1 2 3 4 5 4 5 6 7 8 15,所以輸出3 個連續序列1 5 4 6 和7 8。思路 既然是連續正整數,則可以將其看成是等差數列,公差d 1 等差數列前n項求和公式為sn na1 n n 1 d 2,其中sn為使用者輸...
和為 n 連續正數序列
題目 輸入乙個正數 n,輸出所有和為 n 連續正數序列。例如輸入 15,由於 1 2 3 4 5 4 5 6 7 8 15,所以輸出 3 個連續序列 1 5 4 6 和 7 8。思路 我們再找連續的序列,那麼我們從最小的一直往前加,如果和結果相等,那麼這是乙個符合條件的序列,然後再連續的往後加,如果...