08.12.2006, 18:47
общий
это ответ
Здравствуйте, Олюшка!
В приложении работающий пример программы "Банкомат": Зная достоинства (номинал) купюр (записаны в массиве в начале) выдает на экран все возможные способы представления общей суммы денег в виде комбинации купюр.
Поскольку в вашем случае, "номинал" может быть любым, то надо просто заменить
bancnote[j] на j (и bancnote[max] на max, соответственно). И основной вызов делать так:
expand(<b>N</b>, N, ‘‘);
IntToStr - функция из Delphi, в обычном Pascal-е ее нет. Пишите на <a href=www.freepascal.org>freepascal</a> либо найдите, как называется функция, преобразующая число в строку.
Приложение:
program Bancomate;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
sms: string;
N: integer;
const
bancnote: array[1..8] of integer = (1, 2, 5, 10, 20, 50, 100, 200);
procedure expand(max, sum: integer; s: string);
var
j: integer;
p: string;
begin
// WriteLn(max, ‘ ‘, sum, ‘ ‘, s);
if (sum > 0) then
begin
if (sum - bancnote[max] < 0) then begin
if (max > 0) then
expand(max-1, sum, s)
end else begin
for j := max downto 1 do
begin
if s <> ‘‘ then
p := s + ‘+‘ + IntToStr(bancnote[j])
else
p := IntToStr(bancnote[j]);
expand(j, sum - bancnote[j], p);
end;
end;
end;
if (sum = 0) then WriteLn(s);
end;
begin
ReadLn(N);
expand(8, N, ‘‘);
ReadLn(sms);
end.