一個正整數表示為n個連續正整數之和(第1屆第2題)


題目要求

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

                           15=1+2+3+4+5

                           15=4+5+6

                           15=7+8

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

       樣例輸入:15

       樣例輸出:1+2+3+4+5

                        4+5+6

                        7+8

解決方案

       題意很好懂,這個題第一直覺想到的是三重循環暴力破解,第一重控制序列起點,第二重控制序列元素個數,第三重輸出符合題意的序列,但是顯然,這樣很費時,可不可以改進?可以!

       因為是連續的序列,考慮使用等差數列性質。

       對於等差序列,有三個關鍵的變量:一個是公差,一個是序列起點,另一個是序列長度。顯然這序列公差為1,那么只考慮序列起點start和序列長度n。回味等差數列求和公式:


       由上面的公式可以得出下面的信息:

      1.將上式稍加變形,2S-(n-1)n=2a*n,即2S>(n-1)n>0。

           2.又2S=(2a+n-1)n,故:2S%n==0,(2S/n-n+1)%2==0。

           3.a=(2S/n-n+1)/2

       所以,可以考慮用控制序列長度的方式直接求出符合題意的序列起點,然后輸出。

源碼示例

 

結果展示

 

小結

       題目雖簡單,但還是需要多加考慮,不要一上來就弄個三重循環...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM