Помощь - Поиск - Пользователи - Календарь
Полная версия: Блок-схема
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Guest
Привет всем.

Задали нарисовать блок-схему по задаче, задача такая

Любую сумму денег больше 7 рублей можно разменять на 3 и 5 рублей
Разменяйте N рублей всевозможными способами.
Guest
Помогите тогда решить задачу. :molitva:
Malice
Если тебе нужны ВСЕ способы размена, то делай полный перебор, так проще, т.е:
 for n5:=0 to (Сумма div 5) do
for n3:=0 to (Сумма div 3) do
if (n5*5+n3*3)=сумма then writeln (......);
:yes:
Guest
Malice

Спасибо
klem4
Мне кажется перебор это очень долго .... у меня вот есть другая мысль, работает вроде правильно, только запарка с числом 9 smile.gif ну этот случай можно и отдельно рассмотреть. А так в случае с перебором, это в любом случае

(n div 3 +1)*(n div 5 + 1) операций, тоесть в случае например с n=1000 это будет 334*201 = 67134 blink.gif

в моем случае n div 5 -> 200 smile.gif Если я не прав или ошибаюсь, извиняюсь.



uses crt;

var
n, c5 : integer;

Begin

clrscr;

write('n='); readln(n);

c5 := 0;

while(n>0) do begin
dec(n, 5);
inc(c5);
if n mod 3 = 0 then
writeln('5*', c5, ' + 3*', n div 3);
end;
readln;

end.
Malice
Цитата(klem4 @ 4.09.05 22:15)
Мне кажется перебор это очень долго ....
(n div 3 +1)*(n div 5 + 1) операций, тоесть в случае например с n=1000 это будет 334*201 = 67134  blink.gif


во 1-х, я сказал как проще smile.gif Во 2-х, в смысле долго ? Дольше секунды ? Кстати, кроме 9-ки, она еще и не все варианты ищет, да еще и -1 иногда получается smile.gif Поставь inc и Dec после If и все будет хорошо. :yes:
hiv
Можно и одним циклом в тупом переборе обойтись:
var n5,n :integer;
begin
n:=111;
for n5:=0 to (n div 5) do
if ((n-n5*5) mod 3)=0 then
writeln(n:0,'=',n5:0,'*5p+',((n-n5*5) div 3):0,'*3p');
end.
Работает железно! smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.