自然數的拆分(深度優先搜尋)

2021-07-11 01:57:59 字數 1563 閱讀 4754

description

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

1:4=1+1+1+1 

2:4=1+1+2 

3:4=1+3 

4:4=2+2 

5:4=4 

input

輸入僅一行,包含乙個自然數n。

output

這個自然數拆分結果。拆分出的因子要求滿足s1+s2+…+sk=n 且s1≤s2≤…≤sk。具體要求見樣例

sample input

4

sample output

1:4=1+1+1+1 

2:4=1+1+2 

3:4=1+3 

4:4=2+2 

5:4=4

解題思路:

先讀入n

,然後進行搜尋,結束條件為當所填的數已經等於

n時輸出並退出,從

1

程式:
var
a:array[0..100]of longint;
n,t,total:longint;

procedure print(t:longint);
var

i:longint;

begin

inc(total);

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

for i:=1 to t-1 do

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

writeln(a[t]);

end;

procedure search(s,t:longint);
var

i:longint;

begin

if s=0 then begin print(t-1); exit; end;

for i:=1 to s do

if a[t-1]<=i then

begin

a[t]:=i;

s:=s-i;

search(s,t+1);

s:=s+a[t];

end;

end;

begin
readln(n);
search(n,1);
end.

自然數拆分

描述 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整數劃分可以參考...

自然數拆分

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