В кассе имеются денежные купюры достоинством в 1,5,10,50,100,500 рублей. Необходимо...

0 голосов
87 просмотров

В кассе имеются денежные купюры достоинством в 1,5,10,50,100,500 рублей. Необходимо выплатить сумму n наименьшим кол-вом купюр
Задачу написать на Паскале (используя циклы)


Информатика (20 баллов) | 87 просмотров
0

"Жадный" алгоритм? Или какой-то иной нужно?

0

"жадный"

Дан 1 ответ
0 голосов
Правильный ответ

Const
  c:array[1..6] of integer=(1,5,10,50,100,500);
var
  i:byte;
  n,d:integer;
  k:array[1..6] of integer;
begin
  Write('Введите значение суммы: '); Read(n);
  for i:=1 to 6 do k[i]:=0;
  d:=n; i:=6;
  while d>0 do begin
    k[i]:=d div c[i];
    d:=d mod c[i];
    Dec(i)
  end;
  Write(n,' => ');
  for i:=6 downto 1 do
    if k[i]>0 then Write(c[i],'x',k[i],' ')
end.

Тестовое решение:
Введите значение суммы: 8947
8947 => 500x17 100x4 10x4 5x1 1x2

(142k баллов)
0

Спасибо большое,но мне нужно было чуть-чуть по тупее сделать,без array и тд,все равно,спасибо

0

Тупее - тогда циклов не будет, а у Вас по условию циклы.

0

Если не сложно,то можете написать без циклов?

0

Нет, то глупо, потому что программа станет просто огромной

0

В 6 раз длиннее

0

Просто мы не изучали array,downto и все такое. Учитель сразу поймет :(

0

Если вы изучали цикл for, то и downto изучали. Это одновременно изучается, отсчет на +1 и на -1

0

Это первое. И второе, циклы без массивов в подобных алгоритмах - абсурд.

0

Хотите - замените первый массиве на шесть переменных с1, с2, с3, с4, с5, с6 с соответствующим присваиванием, и второй - на k1, k2, .. k6. И расписывайте шесть раз то, что внутри циклов. 6 внутри, 6 снаружи.... итого 36 раз напишете. Смысл есть?