Консультация № 66124
08.12.2006, 17:28
0.00 руб.
0 5 2
Помогите пожалуйста решить эту задачку!
Вывести все представления натурального числа N суммой натуральных чисел. считается, что перестановка слагаемых нового способа представления числа N не даст.
Заранее спасибо!

Обсуждение

Неизвестный
08.12.2006, 17:48
общий
это ответ
Здравствуйте, Олюшка!
Решение задачи в приложении.

Приложение:
var i,n:word;beginreadln (n);for i:=0 to n div 2 dowriteln (i,‘+‘,n-i);end.
Неизвестный
08.12.2006, 18:23
общий
2<b>Coupler</b>: Если бы там было сказано, что только 2 слагаемых...
Неизвестный
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.
Неизвестный
08.12.2006, 18:51
общий
а на турбо паскале есть???
давно
Мастер-Эксперт
425
4118
08.12.2006, 19:13
общий
В Турбо Паскале функции такой нет, но есть отличная процедура, преобразующая число в строку - Str(). При желании на ее основе можно сделать функцию:<b>Function</b> IntToStr(N: LongInt): string;<b>Var</b>S: string;<b>Begin</b>Str(N, S);IntToStr:=S;<b>End</b>;
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Форма ответа