乙個整數總能夠拆分為2的冪的和。比如:
7=1+2+4
7=1+2+2+2
7=1+1+1+4
7=1+1+1+2+2
7=1+1+1+1+1+2
7=1+1+1+1+1+1+1
總共同擁有6種不同的拆分方式。
再比方:4能夠拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。
用f(n)表示n的不同拆分的種數,比如f(7)=6.
要求編敲**。讀入n(不超過1000000)。輸出f(n)
輸入:乙個整數n(1<=n<=1000000)。
輸出:f(n)
輸入資料假設超出範圍,輸出-1。
例子輸入:
7例子輸出:
6 **實現:
package huawei
import (
"fmt"
)func test08base()
func numbersplit(n int) int
//1=1,1種拆分方式
if n ==1
//2=2,2=1+1。2種拆分方式
if n ==2
//n>=3
//儲存已經計算出來的數值
data := make(int, n+1)
data[0] =0
//該值無意義純佔位作用
data[1] =1
data[2] =2
for i :=3; i <= n; i++ else
}return data[n]
}
演算法基礎 整數拆分問題(Golang實現)
乙個整數總能夠拆分為2的冪的和。比如 7 1 2 4 7 1 2 2 2 7 1 1 1 4 7 1 1 1 2 2 7 1 1 1 1 1 2 7 1 1 1 1 1 1 1 總共同擁有6種不同的拆分方式。再比方 4能夠拆分成 4 4,4 1 1 1 1,4 2 2,4 1 1 2。用f n 表示...
回溯演算法 整數拆分問題
洛谷p2404.簡單的回溯法實現,輸入乙個數字n,求出1到n 1中相加和是n的算式。用乙個ans陣列儲存探索到的每乙個數字,在dfs函式中用減法的形式得到和什麼時候到達了n,到達n也就是temp變為0的時候。同時又根據例項,沒有重複的算式,乙個數字可以用多次,所以i的起始位置要設定乙個start來表...
整數拆分問題
問題 對於1個正整數n,將其拆分成幾個正整數的和,如何拆分可使得其乘積最大?csdn使用者pathuang68給出的結論是 如果不在乎是否為整數的話,那麼把每份平均分為e 2.71828459045.時,所得到的乘積是最大的,如果要是整數的話,那麼就選盡可能地靠近e的整數即可,比如3。具體證明請參見...