Table des matières
Problème du rendu de monnaie
Présentation
Vous achetez un sandwich à 5,48 € et vous payez avec un billet de 10 €. Le vendeur doit vous rendre 4,52 €. Comment peut-il vous rendre cette somme ?
Quelques exemples :
- 2 € + 2 € + 50 c + 2 c
- 2 € + 1 € + 50 c + 50 c + 20 c + 20 c + 10 c + 2 c
- etc.
Parmi toutes ces possibilités, on cherche celle qui utilise le moins de pièces
Je ne parlerai que de pièces, mais cela pourrait être des billets, peu importe.
La réponse attendue dépend donc :
- de la somme à rendre
- des pièces disponibles
Dans ce problème, on considère que le vendeur n'a pas de problème de monnaie, il n'est pas à cours de pièces de 2 € ou autre. Quand je parle de pièces disponibles, je veux parler des pièces existantes dans la monnaie considérée. Il n'y a pas de pièces de 3 € par exemple.
Algorithme glouton
Pour résoudre le problème de rendu de monnaie, l'algorithme glouton consiste à choisir la plus grosse pièce possible. Par exemple, pour rendre 4,52 €,
- La pièce la plus grosse pouvant être utilisée est 2 €.
- Une fois rendu 2 €, il reste 2,52 € à rendre. On peut encore rendre une pièce de 2 €.
- Il reste 52 c à rendre. La plus grosse pièce possible est 50 c.
- Il reste 2 c à rendre. La plus grosse pièce possible est 2c.
L'algorithme glouton consistera donc à choisir la solution 2 € + 2 € + 50 c + 2 c, soit 4 pièces.
Implémentation dans un cas général
On souhaite implémenter cet algorithme. On ne veut pas se limiter au cas normal des pièces disponibles en euros. On veut un cas plus général pour pouvoir utiliser notre programme même dans un pays qui utiliserait des pièces de valeurs différentes.
On utiliser un tuple PIECES pour indiquer les pièces disponibles. En euro on aurait :
PIECES = (50000, 20000, 10000, 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1)
- Les valeurs sont données en centimes pour que l'on n'ait que des nombres entiers.
- Vous pouvez considérer que le tuple est trié de la valeur la plus forte à la plus faible.
Vous devez programmer une fonction rendu qui, en fonction de la somme à rendre et des pièces disponibles, renvoie un tableau donnant les pièces rendues.
def rendu(a_rendre, pieces):
'''
a_rendre: somme à rendre
pieces: tuple contenant les pièces disponibles
renvoie les pièces utilisées
exemple :
si a_rendre = 452 et pieces = PIECES,
renvoie [200, 200, 50, 2]
'''
# à compléter
return []
