Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Ahoj, potřebovala bych poradit s tímto příkladem,
Rozklad na součet
Na standardním vstupu je zadáno číslo N (1 ≤ N ≤ 40). Vypište na standardní výstup všechny možnosti, jak toto číslo rozložit na součet celých kladných čísel. Každý rozklad musí být uveden na samostatném řádku, sčítanci vyjmenováni od nejmenšího k největšímu a odděleny znaménkem "+". Na pořadí řádků nezáleží.
Například pro N=5 je jeden ze správných výstupů následující:
1+1+1+1+1
1+1+1+2
1+1+3
1+2+2
1+4
2+3
5
Podařilo se mi už naprogramovat velkou část, ale nějak to nejsem schopná dodělat. Předem děkuju za jakoukoli radu. Tady je můj kód, pracujeme s Pascalem:
program rozklad;
var i,N,j,d,u,m,p:integer;
pole: array [0..40] of integer;
procedure soucet(k,z,cislo:integer);
begin
if z<cislo then
begin
for i:=z to cislo do
begin
pole[k]:=i;
soucet(k+1,i,cislo-i);
end;
end;
if z=cislo then
begin
pole[k]:=z;
write(pole[1]);
for j:=2 to k do
begin
write('+');
write(pole[j]);
end;
writeln;
end;
if cislo=0 then
begin
if pole[1]<>N then
begin
write(pole[1]);
for u:=2 to k-1 do
begin
write('+');
write(pole[u]);
end;
writeln;
end;
end;
end;
begin
readln(N);
if (N>=1) and (N<=40) then
writeln(N);
begin
for m:=1 to (N div 2) do
soucet(1,m,N);
end;
end.
Offline
ahoj ↑ koninka:,
nad kódem jsem moc nepřemýšlel, ale když jsem ho spustil, zjistil jsem, že jediný problém je v tom, že se některý řádek občas zopakuje. Takže nejjednodušší asi bude "zakázat" duplicitní výpisy. Nejlépe tak, že se založí pole stringů, kam se budou vypsané řádky ukládat. Každý nový řádek se nejdřív poskládá do nového stringu, který se nejdřív porovná s tím, co bylo už dříve vypsáno. Pokud se nenajde duplicita, řádek se vypíše a přidá k "porovnávacímu" poli.
Offline