問題描述
:乙個正整數有可能可以被表示為 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 的...