
Вопрос задан 26.10.2023 в 15:07.
Предмет Информатика.
Спрашивает Епаркин Никита.
Задача в PascalABC.NET. Задана сумма денег в купюрах N. Провести размен монетами, если в кассе
есть N1 - штук по рублю, N2-штук по 2 рубля, N5-штук по 5 рублей, N10 - штук по 10 рублей

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

Отвечает Микенин Даня.
"Жадный" алгоритм
// 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
Размен невозможен
// 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
Размен невозможен



Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
Для решения этой задачи в PascalABC.NET, вы можете воспользоваться жадным алгоритмом. Жадный алгоритм будет поочередно выбирать монеты с наибольшим номиналом и добавлять их к разменной сумме до тех пор, пока сумма размена не станет равной исходной сумме денег. Вот пример кода:
pascalprogram 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). Просто введите необходимые значения при запуске программы, и она выдаст вам размен монетами.


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

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

Информатика 575

Информатика 33

Информатика 39

Информатика 24

Информатика 34

Информатика 136

Информатика 18
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili