Crie um algoritmo de caixa eletrônico que lê a quantidade de dinheiro a ser sacado e imprime a menor quantidade de notas a ser dada ao usuário. A sua máquina de saque eletrônico é carregada com 1.000 (mil) notas de 100, 50, 20, 10, 5 e 1 cada. Imprimir também a quantidade de cada nota a ser dada ao usuário. Lembre-se que você tem uma quantidade finita de cada tipo de nota. O final da leitura é marcado pelo valor 0 que não deve ser calculado.
Exemplo: 98 = uma nota de 50, duas notas de 20, uma nota de 5, e três notas de 1.
Perceba que a cada saque há uma quantidade menor de cada tipo de notas.
Outra situação é quando não é possível sacar o dinheiro com a quantidade de notas existentes. Neste caso, o programa deve cancelar a operação e informar o usuário que não é possível realizar o saque.
Exemplo: 98 = uma nota de 50, duas notas de 20, uma nota de 5, e três notas de 1.
Perceba que a cada saque há uma quantidade menor de cada tipo de notas.
Outra situação é quando não é possível sacar o dinheiro com a quantidade de notas existentes. Neste caso, o programa deve cancelar a operação e informar o usuário que não é possível realizar o saque.
Passo 1
Beleza, então a gente tem que criar um algoritmo para um caixa eletrônico. O objetivo é ler quanto o usuário quer sacar e devolver a menor quantidade possível de notas usando as disponíveis: 100, 50, 20, 10, 5 e 1. A gente também precisa controlar quantas notas já foram usadas, já que cada tipo tem apenas 1000 disponíveis. Se não der pra sacar o valor solicitado com as notas que temos, a gente avisa pro usuário que não é possível.
Passo 2
Primeiro, vamos definir as notas que o caixa tem e a quantidade disponível de cada uma. A gente pode usar uma lista ou um dicionário para isso. Vamos optar por um dicionário para facilitar a manipulação.
notas = {
100: 1000,
50: 1000,
20: 1000,
10: 1000,
5: 1000,
1: 1000
}
Passo 3
Agora, precisamos ler o valor que o usuário quer sacar. Vamos continuar lendo até que o usuário digite 0, que indica o fim.
while True:
valor = int(input("Digite o valor a ser sacado (0 para encerrar): "))
if valor == 0:
break
# Aqui vai o resto do código para processar o saque
Passo 4
Dentro do loop, vamos calcular quantas notas de cada tipo serão necessárias. A ideia é sempre tentar usar a maior nota possível primeiro para minimizar a quantidade de notas.
saque = valor
notas_sacadas = {}
for nota in sorted(notas.keys(), reverse=True):
quantidade = min(saque // nota, notas[nota])
if quantidade > 0:
notas_sacadas[nota] = quantidade
saque -= nota * quantidade
Passo 5
Depois de calcular, vamos verificar se conseguimos sacar o valor solicitado. Se o saque não for 0, significa que não conseguimos com as notas disponíveis.
if saque == 0:
print("Notas sacadas:")
for nota, quantidade in notas_sacadas.items():
print(f"{quantidade} nota(s) de R${nota}")
notas[nota] -= quantidade # Atualiza a quantidade de notas disponíveis
else:
print("Não é possível realizar o saque com as notas disponíveis.")
Resposta
Aqui está o algoritmo completo:
notas = {
100: 1000,
50: 1000,
20: 1000,
10: 1000,
5: 1000,
1: 1000
}
while True:
valor = int(input("Digite o valor a ser sacado (0 para encerrar): "))
if valor == 0:
break
if valor < 0:
print("Valor inválido. Tente novamente.")
continue
saque = valor
notas_sacadas = {}
for nota in sorted(notas.keys(), reverse=True):
quantidade = min(saque // nota, notas[nota])
if quantidade > 0:
notas_sacadas[nota] = quantidade
saque -= nota * quantidade
if saque == 0:
print("Notas sacadas:")
for nota, quantidade in notas_sacadas.items():
print(f"{quantidade} nota(s) de R${nota}")
notas[nota] -= quantidade
else:
print("Não é possível realizar o saque com as notas disponíveis.")
Esse código vai ler o valor do saque, calcular as notas necessárias usando a menor quantidade possível, atualizar a quantidade de notas disponíveis e informar o usuário. Se não der pra sacar, ele avisa que não é possível.