Другие языки программирования и технологии

Как реализовать алгоритм работы банкомата?)

Простенькая программа: вводишь сумму денег, а программа "выдает" тебе эти деньги купюрами 10, 50, 100, 500, 1000, 5000 рублей. То есть: вводим 3540, а программа пишет: 3 купюры по 1000, 1 купюра по 500, 4 купюры по 10.. И кроме того, если мы введеме, например, 90, то пусть не будет "9 купюр по 10", нужно, чтоб было "1 купюра по 50, 4 по 10". в общем оптимизована программа.
Кто может подсказать просто идею алгоритма? Моя реализация уж слишком громоздка: десятки операторов if, и так далее. . в общем, кто подскажет?)
Andriu Borisenko
Andriu Borisenko
4 250
Доброго времени суток.

Попробуйте использовать целочисленное деление. Ваш пример 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.
ВС
Владислав Сенатор
59 613
Лучший ответ
Andriu Borisenko тогда он напишет "0 купюр по 500", а на самом деле там вовсе не 0 купюр по 500) так я уже пробовал..
Это не тот принцип!
банкомат делает проще - выдает деньги только большими купюрами.. округляя
аоптом пищит - чт освячзь с банком потеряна) )

если попросишь - выдаст столько скольо даш. .
т. е. тут надо исходить из базы купюр которыеостались - выдавая чаще крпные. . потом омташиуюся - мелкими. . округляя. . но рубли то не загружают! минимум сотни!))
Andriu Borisenko Я ж не пишу программу для банкомата.. это задача так называется - "Банкомат")
очень похоже на

http:\\resheno.blogspot.com\2009\06\26167274.html
Magerram Kerimli
Magerram Kerimli
5 701
Стучись, несложная задачка. Была на городской олимпиаде лет 6 назад.
Jhon Doe
Jhon Doe
4 010
скорее нужно сделать счетчик (А) имеющихся купюр

далее обнуленные переменные (В) для каждого номинала купюр
в циклах по номиналам
_____пока сумма больше номинала и счетчик (А) не равен нулю увеличиваем переменную (В) и уменьшаем счетчик (А) и уменьшаем сумму на номинал
так по всем номиналам
если после этого сумма не равна нулю извиняемся и сообшаем что можем выдать только запрошенная сумма минус остаток
далее если переменная номинала равна нулю в итог не выводится иначе выводим

вроде все

не самое кудрявое но 100% рабочее и соответствует условиям
ЮК
Юрий Ким
2 501
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;
}
Andriu Borisenko хм, идею пока не понял, разбираюсь..
Анастасия Альбертовна фишка в том, что в первом массиве храниться кол-во купюр,их можно будет потом в отдельном массиве прогнать
(для выдачи)т.е если int1[0]=2 то будет 20 р