乙個整數總可以拆分為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。
樣例輸入:
樣例輸出:
**實現:
複製** **如下:
package huawei
import (
&n程式設計客棧bsp; "fmt"
)fu程式設計客棧nc 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演算法問題之整數拆分實現方法分析
本文位址:
演算法基礎 整數拆分問題(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 表示...
演算法基礎 整數拆分問題(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來表...