Составить программу, решающую следующую задачу: Вы покупаете товар, и у Вас имеются монеты номиналом...

Тематика Информатика
Уровень 5 - 9 классы
программирование алгоритмы жадный алгоритм минимизация монеты Паскаль задача о минимальных монетах оптимизация
0

Составить программу, решающую следующую задачу: Вы покупаете товар, и у Вас имеются монеты номиналом 1, 2, 5, 10 рублей. Наберите необходимую сумму товара в N рублей так, чтобы она состояла из минимального количества монет. язык паскаль

avatar
задан месяц назад

2 Ответа

0

Для решения данной задачи можно использовать жадный алгоритм. Программа будет перебирать возможные варианты набора монет для достижения суммы N рублей, начиная с самой крупной монеты и постепенно добавляя монеты меньшего номинала до достижения нужной суммы.

Пример программы на языке Pascal:

program MinCoins;
var
  N, count, coins: integer;
begin
  writeln('Введите сумму N:');
  readln(N);
  
  coins := 0;
  
  count := N div 10; // количество монет номиналом 10
  coins := coins + count;
  N := N mod 10;
  
  count := N div 5; // количество монет номиналом 5
  coins := coins + count;
  N := N mod 5;
  
  count := N div 2; // количество монет номиналом 2
  coins := coins + count;
  N := N mod 2;
  
  coins := coins + N; // количество монет номиналом 1
  
  writeln('Минимальное количество монет для суммы N: ', coins);
end.

Это простая программа, которая находит минимальное количество монет для заданной суммы N, используя монеты номиналом 1, 2, 5, 10 рублей.

avatar
ответил месяц назад
0

Конечно, давайте рассмотрим, как можно составить программу на языке Паскаль для решения задачи минимального набора монет для получения суммы в N рублей. Эта задача является классической задачей о размене денег, где мы хотим минимизировать количество используемых монет для достижения заданной суммы.

Алгоритм

Основной идеей является использование жадного алгоритма, который на каждом этапе старается использовать монету наибольшего номинала, не превышающего оставшуюся часть суммы. Этот подход эффективен для нашего набора монет (1, 2, 5, 10 рублей), так как каждый больший номинал является кратным меньших номиналов.

Программа на языке Паскаль

program CoinChange;

var
  N: Integer; // Сумма, которую нужно набрать
  coins: array[1.4] of Integer = (10, 5, 2, 1); // Доступные номиналы монет
  count: array[1.4] of Integer; // Массив для хранения количества монет каждого типа
  i: Integer;
  
begin
  writeln('Введите сумму в рублях:');
  readln(N);
  
  // Инициализация массива count нулями
  for i := 1 to 4 do
    count[i] := 0;
  
  // Жадный алгоритм для размена
  for i := 1 to 4 do
  begin
    if N >= coins[i] then
    begin
      count[i] := N div coins[i]; // Определяем количество монет текущего номинала
      N := N mod coins[i]; // Обновляем оставшуюся сумму
    end;
  end;
  
  // Вывод результата
  writeln('Необходимое минимальное количество монет:');
  for i := 1 to 4 do
    if count[i] > 0 then
      writeln(coins[i], ' рублевые монеты: ', count[i]);
end.

Объяснение

  1. Инициализация: Мы определяем массив coins, где хранятся номиналы монет в порядке убывания, и массив count, чтобы отслеживать количество каждой монеты.

  2. Ввод данных: Пользователь вводит значение N — сумму, которую он хочет набрать.

  3. Жадный алгоритм:

    • Для каждого номинала монет (начиная с наибольшего) программа определяет, сколько таких монет можно использовать (N div coins[i]).
    • Обновляет оставшуюся сумму (N mod coins[i]).
  4. Вывод результата: Программа выводит количество монет каждого номинала, необходимое для составления суммы.

Этот подход работает оптимально для данного набора монет, так как каждый последующий номинал кратен предыдущим.

avatar
ответил месяц назад

Ваш ответ

Вопросы по теме