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.
Exercícios relacionados
Crie um algoritmo que leia um número N e verifique se ele é primo. O seu programa deve fazer o MíNIMO de interações possíveis.
Crie a função multiplica_matriz(mat1, mat2) que deve retornar o produto de duas matrizes bidimensionais genéricas, sem alterar as matrizes originais. A função deve imprimir uma mensagem de erro e retornar um vetor vazio ([]) caso não for possível realizar o produto das duas matrizes.
Crie um algoritmo que leia um número (com qualquer número de dígitos) em uma base numérica de ordem < 10 e calcule o número correspondente na base decimal. O número da ordem da base (e.g., 2 para binária, 3 para ternária, 8 para octal, etc.) deve também ser informado pelo usuário.
Jogo de dados. Dois jogadores estão confrontando-se entre si, usando dois dados, numerados de 1 até 6 (dado <random.randint(1,6)). Vence uma rodada quem obtiver o maior número no lançamento. Entretanto, caso um jogador obtiver um lançamento com dois dados iguais (por exemplo, 1 e 1 , 2 e
. ) e o outro jogador não, o jogador que tiver lançado a dupla ganha. Caso os dois jogadores fizerem o lançamento e o resultado for de duas duplas para os dois jogadores, ganha o jogador com a dupla maior. A disputa é em 11 lançamentos. Indique o jogador vencedor ou se houve empate.