連續正整數之和

2021-04-13 06:30:48 字數 960 閱讀 5697

題目描述:乙個正整數有可能可以被表示為n(n>=2)個連續正整數之和,如:

15=1+2+3+4+5

15=4+5+6

15=7+8

請編寫程式,根據輸入的任何乙個正整數,找出符合這種要求的所有連續正整數序列。 

輸入資料:乙個正整數,以命令列引數的形式提供給程式。

輸出資料:在標準輸出上列印出符合題目描述的全部正整數序列,每行乙個序列,每個序列都從該序列的最小正整數開始、以從小到大的順序列印。如果結果有多個序列,按各序列的最小正整數的大小從小到大列印各序列。此外,序列不允許重複,序列內的整數用乙個空格分隔。如果沒有符合要求的序列,輸出「none」。 

例如,對於15,其輸出結果是:

1 2 3 4 5

4 5 6

7 8

對於16,其輸出結果是:

none

解法收集:

main() 

n個連續整數的最小值為:

1+2+3+4+…+n=(n+1)*n/2,即lidate可以表示的項數最多的形式不超過1+2+3+4+…+n的項數。

而n*(n+1)=2*lidate,所以定有n<=sqrt(2*lidate)

若正整數可以表示為:lidate=a1+a2+a3+…an

則一定可以表示為:lidate=(a1+an)*n/2

則項數n=2*lidate/(a1+an)

因a1+an為整數,故2*lidate%n一定等於0,故有程式中的條件if(2*lidate%icount==0)

若n為奇數,一定可以表示為a1+a2+…an的形式,故有程式中的條件if(icount%2)。

若n為偶數,則a1+an一定為奇數(因為若a1為奇數,則an為偶數;若a1為偶數,則an為奇數,總之,其和定為奇數),即(a1+an)%2==1,即2*lidate/n%2==1,故有程式中的條件:else if(2*lidate/icount%2)

3276 連續正整數之和

單點時限 2.0 sec 記憶體限制 256 mb 有些正整數可以表示為 n n 1 個連續正整數的和,如 15 1 2 3 4 5 4 5 6 7 8 給定乙個正整數 n,判斷其是否可以表示為一組連續正整數的和,輸出符合條件的解的組數。輸入格式 第 1 行 乙個整數 t 1 t 10 為問題數。第...

基本演算法 拆分為連續正整數之和

整數拆分 即把乙個給定的正整數拆分為若干個連續正整數之和 例如 將輸入乙個整數15,可以拆分為 15 1 2 3 4 5 15 4 5 6 15 7 8 分析 由題可知,拆分的起始項i不會超過該數n的一半減一 1 n 1 2 累加項不會超過該數的一半加一 i n 1 2 這裡可以作為迴圈的條件,在j...

將整數分解為連續正整數之和

將乙個整數 n 分解為連續正整數之和,如 15 可以分解為 15 1 2 3 4 5 15 4 5 6 15 7 8 計算從 i 開始連續 k 個數之和 sum k 2 i k 1 2 當 sum n 時,有 k k 2 i 1 k 2 n 0 變形為 i 2 n k k 1 2。在 2,2 n k...