• В некотором государстве в обращении находятся банкноты определенных номиналов. Национальный банк хочет, чтобы банкомат выдавал любую запрошенную сумму при помощи минимального числа банкнот, считая, что запас банкнот каждого номинала неограничен. Помогите Национальному банку решить эту задачу.
    Формат ввода

    Первая строка входных данных содержит натуральное число N не превосходящее 100 — количество номиналов банкнот в обращении. Вторая строка входных данных содержит N различных натуральных чисел x1, x2, …, xN, не превосходящих 10 в 6 степени — номиналы банкнот. Третья строчка содержит натуральное число S, не превосходящее 10 в 6 степени — сумму, которую необходимо выдать.
    Формат вывода

    В первую строку выходного файла выведите минимальное число слагаемых (или -1, если такого представления не существует). Во вторую строку выведите это представление в любом порядке.
    Пример

    Ввод
    5
    1 3 7 12 32
    40
    Вывод
    3
    32 7 1

Ответы 6

  • Вы пишете в синтаксисе Бейсика; не проще ли было скопировать сюда текст отлаженной программы с контрольным примером?
  • К сожалению, мне отлаживать не в чем да и времени нет. А вот насчет "Если сумму смогли выдать" я не понял. Если запрашиваемая сумма S меньше, чем самая маленькая бумажка, то размен невозможен и надо поставить k = -1 и выйти из цикла.
    • Автор:

      adonis
    • 6 лет назад
    • 0
  • Сейчас верно, Вы же поменяли решение. А мой комментарий был для исходного текста. А отладить можно в любой Windows, сохраните текст в Бейсике с расширением vbs и запустите)
  • Если особенностей VBScript не знаете - их легко найти в Интернет. Главная - простые переменные не описываются, а получают тип при присваивании. И в программе на ставится финальный end
    • Автор:

      quinnxizs
    • 6 лет назад
    • 0
  • *НЕ ставится
    • Автор:

      scout22
    • 6 лет назад
    • 0
  • const  nn=100; { предельное количество номиналов банкнот }type  bnk=longint;var  nom,res:array[1..nn] of bnk;  i,n,koln:integer;  sum:bnk;procedure Sort(n:integer);var  i,j:integer;  t:bnk;begin  for i := 1 to n-1 do    for j := 1 to n-i do      if nom[j] > nom[j+1] then      begin t := nom[j]; nom[j] := nom[j+1]; nom[j+1] := t endend;begin  Readln(n);  for i:=1 to n do Read(nom[i]);  Readln(sum);  Sort(n);  koln:=0; i:=n;  while sum>0 do begin    while nom[i]>sum do Dec(i);    Inc(koln); res[koln]:=nom[i];    sum:=sum mod nom[i];    if (sum<nom[1]) and (sum<>0) then begin sum:=0; koln:=-1 end  end;  if koln=0 then koln:=-1;  Writeln(koln);  for i:=1 to koln do Write(res[i],' ');  Writelnend.Тестовые решенияКонтрольный пример:51 3 7 12 3240332 7 1 Еще один пример:81 5 10 50 100 500 1000 5000458661000 500 50 10 5 1
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years