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

2021-09-08 03:55:14 字數 885 閱讀 5078

問題描述

:乙個正整數有可能可以被表示為 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

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

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

將乙個正整數L隨機拆分成n個正整數

隨機指定範圍內n個不重複的數 最簡單最基本的方法 param min 指定範圍最小值 param max 指定範圍最大值 param n 隨機數個數 public static int randomcommon int min,int max,int n int result new int n i...

求和為n的連續正整數序列

題目 輸入乙個正數n,輸出所有和為n連續正整數序列。例如輸入15,由於1 2 3 4 5 4 5 6 7 8 15,所以輸出3個連續序列1 5 4 6和7 8。解法1 因為整數序列是有序的,可以設立兩個游標begin和end,通過判區間 begin,end 的和是否為n來得到這個序列。如果區間和大於...

輸入乙個正數n,輸出所有和為n連續正整數序列

public class lzwcode 題目 輸入乙個正數n,輸出所有和為n連續正整數序列。例如輸入15,由於1 2 3 4 5 4 5 6 7 8 15,所以輸出3個連續序列1 5 4 6和7 8。思路 因為整數序列是有序的,可以設立兩個游標begin和end,通過判區間 begin,end 的...