change

Čtvrťáků použiju jen minimální množství, aby se zbytkem dal zaplatit zbytek. Stejně tak desetníků, pak nikláků a co zbude, doplatím v centech.

Kvůli nedělitelnosti čísel 25 a 10 existuje jedna výjimka: někdy je třeba použít o 1 čtvrťák více!


Procedure TrySol (Pr: Integer; Idx: Integer; Plus: Boolean);
Var I, C: Integer;
	Prev: Integer;
Begin
	Prev := (Pr - Sum[Idx] + Nom[Idx+1]-1) div Nom[Idx+1];
	If (Pr < Sum[Idx]) then Prev := 0;
	If (Plus) then Inc (Prev);
	Use[Idx+1] := Prev;
	Pr := Pr - Prev * Nom[Idx+1];
	if (Prev &gt; Cnt[Idx+1]) then
		{ too many coins needed in the previous step }
	else If (Idx &gt; 0) then
		TrySol (Pr, Idx-1, false)
	else if (Pr = 0) then Begin
		C := 0;
		For I := 1 to 4 do C := C + Use[I];
		If (C = ResCnt) then WriteLn ('WARNING! Two possible solutions!');
		If (C &gt; ResCnt) then Begin
			ResCnt := C;
			For I := 1 to 4 do ResUse[I] := Use[I];
		End;
	End;
End; { TrySol }

		ReadLn (Cnt[1], Cnt[2], Cnt[3], Cnt[4]);
		Sum[0] := 0;
		For I := 1 to 4 do
		Begin
			Val[I] := Cnt[I] * Nom[I];
			Sum[I] := Sum[I-1] + Val[I];
		End;

		ResCnt := 0;
		TrySol (Price, 3, false);
		TrySol (Price, 3, true);