Автор Ёергей Кушнерчук задал вопрос в разделе Другие языки и технологии
Как реализовать алгоритм работы банкомата?) и получил лучший ответ
Ответ от Gennady[гуру]
Доброго времени суток.
Попробуйте использовать целочисленное деление. Ваш пример 3540.
3540 div 5000 = 0 3540-0*5000=3540
3540 div 1000 = 3 3540-3*1000=540
540 div 500 = 1 540-1*500=40
40 div 100 = 0
40 div 50 = 0
40 div 10 = 4
Как-то так.. Если выдаваемые купюры вы занесете в массив, то программка получися довольно короткой. Правда здесь не реализована возможность выдавать требуемыми купюрами.
Удачи!
ЗЫ На паскале реализация может быть такой
const
Money : array[1..6] of Integer = (5000,1000,500,100,50,10);
var
N, M, i, K : Integer;
begin
Readln(N);
M := N;
i := 1;
while M > 0 do begin
K := M div Money[ i ];
M := M - K * Money[ i ];
if K > 0 then WriteLn(K, ' купюр по ', Money[ i ]);
i := i + 1;
end;
ReadLn;
end.
Gennady
(51359)
Не понял, где ноль купюр по 500? Вы делаете это последовательно, начиная с больших купюр и выводите только отличные от нуля результаты деления.
Стучись, несложная задачка. Была на городской олимпиаде лет 6 назад.
Это не тот принцип!
банкомат делает проще - выдает деньги только большими купюрами.. округляя
аоптом пищит - чт освячзь с банком потеряна) )
если попросишь - выдаст столько скольо даш. .
т. е. тут надо исходить из базы купюр которыеостались - выдавая чаще крпные. . потом омташиуюся - мелкими. . округляя. . но рубли то не загружают! минимум сотни!))
очень похоже на
http:
esheno.blogspot.com2009 626167274.html
j-переменная
int1[5]-массив
int2[5]-массив 2
int2[0]=10
in2t[1]=50
int2[2]=100
int2[3]=500
int2[4]=1000
int2[5]=5000
for(i=5;i<5;i--){
int count=1
int s=0;
while(count){
if(j>int2){
j=j-int2; count=1;s++
}else{count=0;}}
int1=s;
}
скорее нужно сделать счетчик (А) имеющихся купюр
далее обнуленные переменные (В) для каждого номинала купюр
в циклах по номиналам
_____пока сумма больше номинала и счетчик (А) не равен нулю увеличиваем переменную (В) и уменьшаем счетчик (А) и уменьшаем сумму на номинал
так по всем номиналам
если после этого сумма не равна нулю извиняемся и сообшаем что можем выдать только запрошенная сумма минус остаток
далее если переменная номинала равна нулю в итог не выводится иначе выводим
вроде все
не самое кудрявое но 100% рабочее и соответствует условиям