Помощь - Поиск - Пользователи - Календарь
Полная версия: Блок-схема
Форум «Всё о Паскале» > 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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.