Mince a polynomy

Zadání

  1. ☛ množina typů mincí T(dle hodnot např. { 1,2,5,10 })
  2. ☛ 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€)
  3. ☛ 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. 1. pro každý typ t ∈ T zkonstruujeme polynom:
  2. 2. vynásobením všech polynomů z předchozího kroku získáme polynom:
  3. 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.