Troco do caixa
Elabore um algoritmo para determinar as cédulas do saque em um terminal de autoatendimento bancário. O algoritmo receberá o valor de deve ser entregue, seguido dos tipos de cédula. O terminal deve entregar o menor número de cédulas possível, mas com pelo menos uma cédula de cada tipo solicitado. Considere que o sempre existirá uma solução possível.
Por exemplo, se o valor for de R$ 100,00 e forem solicitadas cédulas de R$ 20,00 e R$ 10,00, o caixa deverá entregar 4 cédulas de R$ 20,00 e 2 cédulas de R$ 10,00. Nunca seriam solicitadas as cédulas de R$ 50,00 e R$ 20,00 pois não existiria solução possível com as restrições apresentadas.
Código em Python
total = int(input()) #total a ser sacada
nota1 = int(input()) #primeiro tipo de nota
nota2 = int(input()) #segundo tipo de nota
#int() pega apenas a parte inteira da divisão
notas1 = int(total / nota1)
#desconta o que já foi dado em notas de 100
total = total - (notas1 * nota1)
#faz o mesmo para a outra nota
notas2 = int(total / nota2)
print "Notas de ", nota1, ": ", notas1
print "Notas de ", nota2, ": ", notas2
Teste o código: http://www.codeskulptor.org/#user43_Zo0wEeOtyz_0.py
Código em C/C++
#include <stdio.h>
int main(void) {
int total, nota1, nota2, notas1, notas2;
scanf("%i", &total); //total a ser sacado
scanf("%i %i", ¬a1, ¬a2); //ler os dois tipos de nota
//divisão de inteiro por inteiro resulta apenas a parte inteira da divisão
//eu garanti com o casting (int) que converte um valor para inteiro
notas1 = (int)total / nota1;
total = total - (notas1 * nota1); //desconta o que já foi dado em notas do primeiro tipo
notas2 = (int)total / nota2; //faz o mesmo para a outra nota
printf("Notas de %i: %i \n", nota1, notas1);
printf("Notas de %i: %i", nota2, notas2);
return 0;
}
Teste o código: http://ideone.com/a3WZWh