自然數拆分

2021-08-21 15:07:26 字數 810 閱讀 6668

【問題描述】自然數的拆分:任何乙個大於1的自然數n,

總可以拆分成若干個自然數之和,並且有多種拆分方法。試求 n的所有拆分。

例如自然數5,可以有如下一些拆分方法:

5=1+1+1+1+1

5=1+1+1+2

5=1+2+2

5=1+4

5=2+3

注意,本題中n拆分出來的數x的範圍是1<=x整數劃分可以參考:

演算法一  用回溯法來實現

針對所給問題,定義問題的解空間;如本題對5的拆分來說,1<=拆分的數<5。

確定用於搜尋的解空間結構;如本題對5的拆分來說,用x[ ]陣列來儲存解,每個陣列元素的取值範圍都是1<=拆分的數<=5,從1開始搜尋直到5。 

搜尋解空間,並在搜尋過程中用剪枝函式避免無效搜尋。

如本題對5的拆分來說,為了避免重複,x[i] >= x[j]  ( i > j ),如x=滿足條件而x=就不滿足條件不是可行解即無效。

1 #include2 #include3 

4 void splitn(int n,int m);// n是需要拆分的數,m是拆分的進度。

5 int x[1024]=,total=0 ;// total用於計數拆分的方法數,x用於儲存解

6 void main()

7 14

15 void splitn(int n,int m)

16 ;

5 void split(int t)

6 else dp[i][j]=dp[i][i];

} }cout<

}

自然數拆分

描述 description 輸入自然數n,然後將其拆分成由若干數相加的形式,參與加法運算的數可以重複。輸入格式 inputformat 輸入只有乙個整數n,表示待拆分的自然數n。n 80 輸出格式 outputformat 輸出乙個數,即所有方案數 樣例輸入 sampleinput 複製資料 7 ...

自然數拆分

題目 給出sum min max和n四個正整數,請輸出所有將sum拆分為n個遞增的正整數 允許相等 之和,其中每個正整數k都滿足 min k max。在少俠的部落格 看到這道題 就隨手做了下。該題與輸出n個數取m個數的所有組合類似,只不過限定了m個數的和以及取值範圍。可以先用貪心演算法構造乙個最小的...

自然數無序拆分

原 2018年12月09日 12 10 27 oneplus123 時間限制 1 sec 記憶體限制 128 mb 題目描述 美羊羊給喜羊羊和沸羊羊出了一道難題,說誰能先做出來,我就獎勵給他我自己做的一樣禮物。沸羊羊這下可樂了,於是馬上答應立刻做出來,喜羊羊見狀,當然也不甘示弱,向沸羊羊發起了挑戰。...