演算法基礎 整數拆分問題(Golang實現)

2021-09-07 13:24:15 字數 843 閱讀 9161

乙個整數總能夠拆分為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。具體證明請參見...