搜尋與回溯5 3 自然數拆分

2021-07-24 20:58:20 字數 1011 閱讀 2814

ssl 1661

洛谷 p2404 自然數的拆分問題

題目說明

任何乙個大於1的自然數總可以拆分成若干個自然數之和。

例: 1:4=1+1+1+1

2:4=1+1+2

3:4=1+3

4:4=2+2

5:4=4

var

n,l,m,x:longint;

a:array[1..10000000]of longint;

procedure

print;

var i:longint;

begin

write(l,':',n,'=');

for i:=1

to n do

if a[i+1]<>0

then

begin

write(a[i],'+');

endelse

break;

writeln(a[i]);

end;

procedure

search

(k:longint);

var i:longint;

begin

if k=0

then

begin inc(l);print;exit; end

else

for i:=1

to k do

if i>=x then

begin

inc(m);

a[m]:=i;

x:=i;

search(k-i);

x:=i-1;

a[m]:=0;

dec(m);

end;

end;

begin

readln(n);

search(n);

end.

搜尋解,每搜尋一次便減去n的值,值為0則列印一行。

就這樣,簡單粗暴!

回溯遞迴 自然數的拆分

題目 自然數的拆分 任何乙個大於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...

自然數拆分

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

自然數拆分

問題描述 自然數的拆分 任何乙個大於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整數劃分可以參考...