Задача 19 Урок 15
Primary tabs
Пользователь вводит целое число - сумму в некоторой валюте, требуется выдать эту сумму купюрами наибольшего достоинства.
Напишите программу, которая в качестве результата скажет как именно надо разменять указанную сумму купюрами наибольшего достоинства (укажет количество для купюры каждого типа)
Например, пусть у нас набор купюр 1000, 500, 100 и 50 рублей:Сумму 350 рублей: по задаче следует выдать как: 3 по 100 и 1 по 50
Сумму 520 рублей: таким набором разменять нельзя.
Указания по возможному оформлению (можно оформлять и иначе):Напишите процедуру, которая:
-принимает на вход число (сумму) по значению
-массив "достоинств" купюр отсортированный по убыванию (предположим, что видов купюр не может быть больше 10) по значению
-массив для "количеств купюр" по ссылке
-булевский параметр успешности подбора купюр (некоторые суммы вообще разменять нельзя)
После выполнения процедуры в четвертом параметре должен быть true или false, а в массиве "количеств" должены находится находится значения, на основании которых банкомант мог бы выдать купюры.
type inArr = array[1..4] of Integer;
var N: integer;
z: boolean;
a, b: array [1..4] of integer;
procedure Razmen(N: integer; a:inArr; var b: inArr; var z: boolean);
var i: integer;
begin
if((N mod 50) = 0) then
begin
for i := 1 to 4 do
begin
b[i] := N div a[i];
N := N mod a[i];
if(b[i] <> 0) then
writeln(b[i],' kypuri po ',a[i]);
end;
z := true;
end
else
begin
writeln('razmen ne vozmozhen');
z := false;
end;
end;
begin
write('vvedi celoe chislo - summ ');
readln(N);
a[1] := 1000;
a[2] := 500;
a[3] := 100;
a[4] := 50;
b[1] := 0;
b[2] := 0;
b[3] := 0;
b[4] := 0;
Razmen(N,a,b,z);
if(z) then
writeln('yspeh')
else
writeln('failed');
readln();
end.
результат
vvedi celoe chislo - summ 1450 1 kypuri po 1000 4 kypuri po 100 1 kypuri po 50 yspeh
- Log in to post comments
- 3235 reads
vedro-compota
Tue, 08/17/2021 - 21:02
Permalink
пусть набор купюр:
пусть набор купюр:
и нужно выдать:
_____________
матфак вгу и остальная классика =)
jl8qy9kd_pro
Sat, 08/28/2021 - 21:19
Permalink
ADD NEW condition
type inArr = array[1..4] of Integer; var N: integer; z: boolean; a, b: array [1..4] of integer; procedure Razmen(N: integer; a:inArr; var b: inArr; var z: boolean); var i: integer; begin if((N mod 50) <> 0) then // если число не кратно 50 begin while ((N mod 50) <> 0) do // цикл по уменьшению суммы пока оно не станет кратным 50 begin N:= N - 30; b[4]:=b[4]+1; end; end; if((N mod 50) = 0) then // цикл по перебору остатка кратного 50 begin for i := 1 to 3 do begin b[i] := N div a[i]; N := N mod a[i]; end; z := true; for i := 1 to 4 do // цикл вывода купюр begin if(b[i] <> 0) then writeln(b[i],' kypuri po ',a[i]); end; end else begin writeln('razmen ne vozmozhen'); z := false; end; end; begin write('vvedi celoe chislo - summ '); readln(N); a[1] := 1000; a[2] := 100; a[3] := 50; a[4] := 30; b[1] := 0; b[2] := 0; b[3] := 0; b[4] := 0; Razmen(N,a,b,z); if(z) then writeln('yspeh') else writeln('failed'); readln(); end.Результат
vedro-compota
Sun, 08/29/2021 - 13:25
Permalink
if((N mod 50) = 0) then
решить для произвольного набора купюр
_____________
матфак вгу и остальная классика =)
jl8qy9kd_pro
Mon, 09/13/2021 - 22:43
Permalink
RE
??
vedro-compota
Tue, 09/14/2021 - 22:08
Permalink
N M K G H
9%9 4567 div 17 17 [2, 1...., 2, 0, x] X_{n-1} * 1 + t 130 100 50 30 1 0 1_____________
матфак вгу и остальная классика =)