Mince a polynomy
Zadání
- ☛ množina typů mincí T(dle hodnot např. { 1,2,5,10 })
- ☛ funkce cnt: T → N, která udává pro každý typ, kolik mincí tohoto typu máme k dispozici (např. cnt(5)=3 znamená, že máme 3x 5€)
- ☛ cílová částka S
Zjistěte, kolika způsoby je možné zaplatit S, při daném T a cnt.
Řešení pomocí polynomů
- 1. pro každý typ t ∈ T zkonstruujeme polynom:
- 2. vynásobením všech polynomů z předchozího kroku získáme polynom:
- 3. hledaný počet způsobů je koeficient v polynomu P u členu s exponentem rovným S
Násobení polynomů
Pro polynom jsme si vytvořili následující datovou strukturu založenou na spojovém seznamu:
type PClen = ^TClen; TClen = record koef: longint; expo: longint; next: PClen; end;
Pro tuto strukturu jsme programovali funkci, která násobí dva polynomy:
function nasob(A,B: PClen): PClen;
Přitom je možné využít lehce upravené procedury pro práci se spojovým seznamem z minulého domácího ukolu.
Domácí úkol
V CodExu je zadána úloha Spojové seznamy - Dělení řidkých polynomů. Můžete předpokládat, že exponent prvního načteného polynomu je větší, než všechny exponenty druhého polynomu.