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
Máme osít N záhonů. Na každém záhonu může být buď mrkev nebo petržel, avšak nikdy nesmí být žádné dva sousední záhony osety petrželí. Sestavte program, který ze standardního vstupu přečte počet záhonů N a na standardní výstup vypíše číslo P, kde P je počet různých přípustných osetí.
Snažte se o efektivní výpočet. Vstupní číslo N nesmí být větší než 44. Pro výpočty použijte typ longint.
moje řešení je takhle , ale nevím dál protože mi to nevypisuje co má. Ďekuji
program mrkev;
var pocet:longint;
c,b:boolean;
x,y:longint;
function pocetmp(a:longint; my:boolean):longint;
begin
if my=false then
begin
pocetmp:=pocetmp(a-1, true);
end else
pocetmp:=pocetmp(a-1,true)+pocetmp(a-1,false);
pocetmp:=pocetmp(a,true)+pocetmp(a,false);
end;
begin
readln(pocet);
c:=true;
b:=false;
x:=pocetmp(pocet,b);
y:=pocetmp(pocet,c);
writeln(x+y);
end.
Offline
Ahoj,
dřív než začneš psát nějaký program je dobrý se nad tím ještě jednou zamyslet, protože se občas ukáže, že ta úloha je matematicky triviální. To je i tento případ.
Předpokládejme, že umíme nějak spočítat počet možností P(n) pro n záhonů. Kolik je P(n+1)? No když na n+1. pozici dám mrkev, tak je jedno co je předtím, takže za mrkev mám P(n) možností. Když tam ale dám petržel, tak je jasné, že na n-té pozici musí být mrkev, a proto je jedno, co je před ní, takže to je P(n-1) možností za petržel. Takže celkem mám P(n+1)=P(n)+P(n-1). Doufám, že už je v tom vidět jistá známá posloupnost, jejíž n-tý člen se dá efektivně spočítat forcyklem.
Offline