Вопрос задан 26.10.2023 в 15:07. Предмет Информатика. Спрашивает Епаркин Никита.

Задача в PascalABC.NET. Задана сумма денег в купюрах N. Провести размен монетами, если в кассе

есть N1 - штук по рублю, N2-штук по 2 рубля, N5-штук по 5 рублей, N10 - штук по 10 рублей
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Микенин Даня.
"Жадный" алгоритм

// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!

begin
  var k:=Arr(1,2,5,10); // номиналы монет
  var m:=ReadArrInteger('Кол-во монет по '+k.JoinIntoString+' руб:',4);
  var n:=ReadInteger('Сумма в купюрах, руб:');
  if m.Zip(k,(p,q)->p*q).Sum<n then begin // нехватка монет
    Writeln('Размен невозможен'); exit
    end;
  var s:=''; // для результатов
  for var i:=k.Length-1 downto 0 do
    if (n>=k[i]) and (m[i]>0) then begin // номинал участвует
      var t:=min(n div k[i],m[i]); // кол-во монет
      n:=n-k[i]*t; // остаток
      if s.Length>0 then s+=', ';
      s+=t+' по '+k[i]+' руб.';
      end;
  if n<>0 then Writeln('Размен невозможен')
  else Writeln(s)
end.

Примеры
Кол-во монет по 1 2 5 10 руб: 350 215 86 130
Сумма в купюрах, руб: 1526
130 по 10 руб., 45 по 5 руб., 1 по 1 руб.

Кол-во монет по 1 2 5 10 руб: 500 146 0 38
Сумма в купюрах, руб: 432
38 по 10 руб., 26 по 2 руб.

Кол-во монет по 1 2 5 10 руб: 10 20 30 40
Сумма в купюрах, руб: 25000
Размен невозможен
0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для решения этой задачи в PascalABC.NET, вы можете воспользоваться жадным алгоритмом. Жадный алгоритм будет поочередно выбирать монеты с наибольшим номиналом и добавлять их к разменной сумме до тех пор, пока сумма размена не станет равной исходной сумме денег. Вот пример кода:

pascal
program CoinExchange; var N, N1, N2, N5, N10, coins1, coins2, coins5, coins10: Integer; begin Write('Введите сумму денег (N): '); Readln(N); Write('Введите количество монет по 1 рублю (N1): '); Readln(N1); Write('Введите количество монет по 2 рубля (N2): '); Readln(N2); Write('Введите количество монет по 5 рублей (N5): '); Readln(N5); Write('Введите количество монет по 10 рублей (N10): '); Readln(N10); coins1 := 0; coins2 := 0; coins5 := 0; coins10 := 0; while N > 0 do begin if (N >= 10) and (N10 > 0) then begin N10 := N10 - 1; coins10 := coins10 + 1; N := N - 10; end else if (N >= 5) and (N5 > 0) then begin N5 := N5 - 1; coins5 := coins5 + 1; N := N - 5; end else if (N >= 2) and (N2 > 0) then begin N2 := N2 - 1; coins2 := coins2 + 1; N := N - 2; end else if (N >= 1) and (N1 > 0) then begin N1 := N1 - 1; coins1 := coins1 + 1; N := N - 1; end else begin Writeln('Невозможно разменять данную сумму монетами.'); Break; end; end; Writeln('Размен монетами:'); Writeln('Монет по 10 рублей: ', coins10); Writeln('Монет по 5 рублей: ', coins5); Writeln('Монет по 2 рубля: ', coins2); Writeln('Монет по 1 рублю: ', coins1); end.

Этот код позволяет разменять сумму денег N монетами с заданными номиналами (N1, N2, N5, N10). Просто введите необходимые значения при запуске программы, и она выдаст вам размен монетами.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос