程式設計題目 和為 n 連續正數序列

2022-05-18 11:19:08 字數 996 閱讀 7149

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 #include 

using

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。思路 我們再找連續的序列,那麼我們從最小的一直往前加,如果和結果相等,那麼這是乙個符合條件的序列,然後再連續的往後加,如果...