Предмет: Информатика, автор: andrejbols

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

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

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

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

Ответы

Автор ответа: Удачник66
3
Попробую.
Начало
Ввод количества номиналов N
Объявляем массивов X(N), Y(N) 
Цикл по i от 1 до N
    Ввод очередного номинала X(i)
Конец цикла по i
Ввод суммы для выдачи S
Подпрограмма сортировки массива X(N) по возрастанию.
Например, пузырьковой сортировкой.
k = 0 ' k - это количество банкнот
Цикл, пока S > 0
    Если S < X(1), то ' Если остаток меньше самого маленького номинала
        S = 0: k = -1 ' то выдать полную сумму невозможно
        Выход сразу из цикла по S
    Конец Если
    i = N
    Цикл, пока X(i) > S
        i = i - 1
    Конец цикла по X(i)
    Y(k) = X(i) ' записываем очередную банкноту в массив Y(N)
    S = S - X(i) ' определяем остаток
    k = k + 1 ' увеличиваем счетчик банкнот
Конец цикла по S
Если k = 0, то k = -1 ' выдать сумму не смогли
Вывод k
Если k > 0, то ' Если сумму можно выдать
    Цикл по i от 1 до k
        Вывод Y(i) + " "
    Конец цикла по i
Конец Если
Конец

Алгоритм пузырьковой сортировки:
Начало подпрограммы
F = True ' Это булева переменная - признак успешности сортировки
Цикл вечный без всяких условий
Если F = True, то
    F = False
    Цикл по i от 1 до N-1
        Если X(i) > X(i+1), то ' если два соседних числа не отсортированы
            Q = X(i) : X(i) = X(i+1) : X(i+1) = Q ' меняем местами эти числа
            F = True
        Конец Если
    Конец цикла по i
Иначе
    Выход из Цикла ' Если F = False
Конец Если
Конец вечного Цикла
Конец подпрограммы

Аноним: Не пойму, как это должно работать. Объявлены массивы X и Y размером N элементов (по числу номиналов банкнот). Поскольку в цикле ввода индекс меняется от 1 до N, можно сделать вывод, что нумерация элементов идет с единицы. Далее, k - это количество банкнот и первоначально оно нулевое. Оператор Y[k]:=X[i] в случае, если сумма S окажется больше максимального номинала банкноты, произойдет ошибка по нарушению индексации при попытке обратиться к Y[0].
Удачник66: Я предполагал вот как. Массив Y сначала пустой, мы находим очередную банкноту, которая меньше S, и записываем ее в Y. Возможно, что нужно проверку Если S < X(1) делать в самом начале цикла по S, перед оператором i = N. Сейчас перепишу.
Удачник66: Так наверное более правильно будет. Все сразу не предусмотришь, приходится отлаживать!
Удачник66: Кстати, есть шутка. Отлаживание программы - это избавление ее от лажи.
Аноним: Вторая ошибка - это
Если S < X(1), то
S = 0: k = -1
Если сумму смогли выдать, то S=0 и по этому условию получаем k=-1...
Аноним: Вы пишете в синтаксисе Бейсика; не проще ли было скопировать сюда текст отлаженной программы с контрольным примером?
Удачник66: К сожалению, мне отлаживать не в чем да и времени нет. А вот насчет "Если сумму смогли выдать" я не понял. Если запрашиваемая сумма S меньше, чем самая маленькая бумажка, то размен невозможен и надо поставить k = -1 и выйти из цикла.
Аноним: Сейчас верно, Вы же поменяли решение. А мой комментарий был для исходного текста. А отладить можно в любой Windows, сохраните текст в Бейсике с расширением vbs и запустите)
Аноним: Если особенностей VBScript не знаете - их легко найти в Интернет. Главная - простые переменные не описываются, а получают тип при присваивании. И в программе на ставится финальный end
Аноним: *НЕ ставится
Автор ответа: Аноним
3
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 end
end;

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],' ');
  Writeln
end.

Тестовые решения
Контрольный пример:
5
1 3 7 12 32
40
3
32 7 1
Еще один пример:
8
1 5 10 50 100 500 1000 5000
4586
6
1000 500 50 10 5 1

Похожие вопросы
Предмет: Русский язык, автор: Montale
Напишите Подробное изложение по данному тексту:

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

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

Она любит ставить самовар. Первая волна работы схлынула, рань прошла, и теперь Василиса по привычке испытывает жажду. День у нее разделяется не на часы, а на самовары: первый самовар, второй, третий... На старости лет чаепитие заменяет ей чуть ли не все удовольствия.

Она еще бегает, возится с чугунками, а сама все время посматривает на самовар: вот он уже посапывает, вот начинает пыхтеть, а вот забормотал, заклокотал. Василиса переносит самовар на стол, садится к нему поближе и вздыхает. Она всегда вздыхает, вздохи у нее имеют множество оттенков - от радости и удивления до боли и страданий.

Василий поднимается не рано: рано ему подниматься незачем. Единственное, как в бане, маленькое окошечко в его амбаре на ночь занавешено: Василий не любит лунный свет, ему кажется, что от луны несет холодом. Кровать стоит изголовьем к окошку, по другую его сторону стоит столик. У дверей на гвоздях развешаны охотничьи и рыболовные снасти, поверх них полушубки и телогрейки. Просыпаясь, Василий сдергивает с окна занавеску, жмурится от врывающегося света, а прицыкнув к нему, заглядывает в окно: как там со снегом, с дождем, с солнцем? Он одевается молча, совсем молча - не пыхтит, не кряхтит, не стонет.

Когда Василий входит в избу, Василиса не оборачивается. Он садится у другого края стола и ждет. Не говоря ни слова, Василиса наливает ему стакан чаю и ставит на середине стола. Он придвигает стакан к себе и отпивает первый обжигающий горло глоток, который уходит внутрь твердым комом.
Предмет: Русский язык, автор: rebenkos82
Прочитайте текст и выполните задание 6-8.

(1) Как-то мать сказала:

- А помнишь, Юрка, как ты в лес пошел и дно у горшка выдрал?

(2)И ожил долгий летний день. (3) Ранним утром – ледяная роса на лугу, потом – неостывшая за ночь песчаная дорога лесом и высокая трава на делянках, где, вымокнув по колено, мы отыскивали позднюю, самую крупную землянику.

(4)В жаркий полдень терпким сосняком мы шли по выгоревшим земляничникам. (5)Ягоды высыхали до духмяной приторной сладости.(6) Некоторые пахли лесным зеленым клопом, который стойко вонюч, и если в горсти земляники случайно его, бывало, засунешь в рот, то в носу свербило от запаха.

(7)Вспотевшие, вялые, спускались в пропахший сыростью и древесным тленом овраг, где на солнечном пятачке пили воду из старого колодца. (8)Вода, вровень с полусопревшим срубом, темнела от листвы, как в осенних лужах. (9)Карабкаешься наверх, наступая на упавшие невесть почему белые тела берез и с ужасом чувствуешь, как нога с хрустом продавливает бересту, - внутри все истлело.

(10)В лес нас водил Мишка Барин, который за грибами и ягодами стал ходить чуть ли не с трехлетнего возраста. (11)Землянику он умел рвать двумя руками, не отставая от женщин, и там, где мы успевали набрать двухлитровый горшочек, он набирал полведра.

(12)В том давнем злополучном походе в нашей ватаге были сыновья директора школы – Славка и Вовка. (13)Славка был моим другом, но сидел он за одной партой с Барином, как захотел сам директор, - Мишка хорошо учился.

(14)В то утро мы встали затемно и двинулись к лесу.

(15)Пройдя по узкой тропике вдоль опушки, едва мы обогнули озеро, Барин сделал нам знак:

-Тсс!..

(16)Мы замолчали.

(17)-Так, - сказал он, - идите вон за тот куст и сидите тихо, мы с Чучелом у Кибитки огород проверим.

(18)За болотистым камышовым отрогом озера Ендовы, на границе ольшаника и редкого сосняка стояла избушка, хозяйку которой звали Кибиткой. (19)Огород ее спускался с пригорка к воде, и мы чуть ли не в каждый поход забирались к ней в огуречник.(20)Огурцы воровали всякие.(21) Доставалось, конечно, не только огурцам, но и луку, редиске, моркови. (22)Мы и огуречником-то звали низину, где она высаживала овощи.

(23)Правда, Кибитка частенько умудрялась высмотреть нас через окно, выскакивала из дома с кочергой и кричала вслед убегающим ребятишкам:

- Вот я вас! Всех запомнила!..

(24)Не повезло нам и на этот раз. Только мы с Барином стали красться, как она вылетела на пригорок и стала вопить:

- Всех, всех чертей вижу. (25) Сегодня же в школу пойду, все отцу расскажу. – (26)Оказывается, она заметила не нас с Барином, а всех остальных, когда они перебегали от куста к кусту. (27) Мы попытались прошмыгнуть в ольшаник, но Кибитка и нас.

(28)- Ах, паразиты! – закричала она. – До чего дожили: учителевы дети воровать стали. (29) И ты, Барин, держись у меня! (30)Напущу на тебя Ауку.

(31)Славка и Вовка сразу помрачнели, а я хоть и бодрился, но мне тоже стало не по себе.

(32)Мишка нас успокоил:

- Никуда она не пойдет.

(33)Мы пошли в лес.

(34)- Только давайте договоримся, - сурово сказал Барин, - друг от друга далеко не уходить, чтобы потом не аукать. (35)Лесная хозяйка напасть может.

(36)Мы про эту Ауку знали давно: и верили в нее, и не верили. (37)Но больше, конечно, верили. (38)Как верили в домовых, чертей, водяных и русалок.

(Ю. Першин «Кислое яблочко»)

6. Проанализируйте содержание текста. Какие из высказываний соответствуют содержанию текста? Укажите номера ответов.

События, описанные в тексте, происходили осенью
Мишка Барин – сын директора школы
Огуречник – низина на огороде, где Кибитка высаживала овощи.
Аука – лесная хозяйка.
Кибитка поймала ребят и рассказала все директору.
7. Проанализируйте средства выразительности в тексте. Укажите варианты ответов, в которых средством выразительности является эпитет.

В жаркий полдень терпким сосняком мы шли по выгоревшим земляничникам.
Некоторые пахли зеленым лесным клопом, который стойко вонюч, и если в горсти земляники случайно его, бывало, засунешь в рот, то в носу свербило от запаха.
Карабкаешься наверх, наступая на упавшие невесть почему белые тела берез и с ужасом чувствуешь, как нога с хрустом продавливает бересту.
Вспотевшие, вялые, спускались в пропахший сыростью и древесным тленом овраг, где на солнечном пятачке пили воду из старого колодца.
Выполните лексический анализ слова.
8. Найдите в тексте синоним к слову истлело (предложение 8). Выпишите его