題目 -------自然數的拆分:
任何乙個大於1的自然數n,總可以拆分成若干個小於n的自然數之和。 當n=7共14種拆分方法:
7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4
輸入格式:
輸入n, 1輸入樣例:
在這裡給出一組輸入。例如:
7輸出樣例:
7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4
****現的函式及陣列的作用:
g陣列的作用是儲存拆出來的數,並在最後輸出成果
s()函式的作用是判斷能不能繼續拆(遞迴)
dfs()遞迴函式,負責"拆"n
解題思路:
一開始分析,第乙個加數總是小於n/2,就想到n是由1到n/2拆(也就是乙個dfs()),然後n-x(x<=n/2)繼續拆(遞迴),直到不能裂開。
不能拆的情況:j - (m-j)>1 特殊情況:j = 1, m-j = 2 (m是形參,一開始初始化為n)
(ps:j 和 m - j 的含義:例如 3 會拆成1+2,j就是1,m-j就是2)
**:
#include
using
namespace std;
#define n 9999
int n;
int b[n]
;int g[n]
;bools(
int i ,
int j)
void
dfs(
int i,
int m,
int k)
else
cout<"=";
for(
int p =
0;g[p]!=0
;p++
) cout
; g[k+1]
=0;}
}int
main()
感想:
一點點想出來的感覺真好,明白是怎麼拆的->懂得怎麼拆->最後,懂得怎麼存數字並按照格式輸出。
我覺得這道題難就難在怎麼輸出
最後遞迴我終於懂你一點點了。。。hhhhhh~~
遞迴 拆分自然數
題目描述 天下熙熙,皆為利來 天下攘攘,皆為利往 監獄裡的暗勢力劃分地盤的目的無非是為了獲取利益,他們分配利益的方式是基於這樣乙個準則 設總利益為自然數 則任何乙個大於1的n,總可以拆分成若干個小於n的自然數之和,求出n的所有拆分後選擇最合適的一種進行分配,例如當n 3時,有兩種劃分,即3 1 2和...
遞迴 自然數的拆分問題
2044 回溯 自然數的拆分問題 時間限制 1 sec 記憶體限制 128 mb 提交 狀態 題目描述 輸入自然數n,拆分成由若干數相加的形式,參與加法運算的數可以重複。輸入待拆分的自然數n。輸出若干數的加法式子。樣例輸入 copy 7樣例輸出 copy 1 61 1 5 1 1 1 4 1 1 1...
自然數拆分
描述 description 輸入自然數n,然後將其拆分成由若干數相加的形式,參與加法運算的數可以重複。輸入格式 inputformat 輸入只有乙個整數n,表示待拆分的自然數n。n 80 輸出格式 outputformat 輸出乙個數,即所有方案數 樣例輸入 sampleinput 複製資料 7 ...