Soit q1le quotient entier de spar 50, q2 celui de s−50q1par 20, et q3la valeur de
s−50q1−20q2
10 le nombre de soustractions effectu´ees est q1+q2+q3qui inf´erieur ou ´egal `a
s
50 + 3
3. G´en´eraliser votre algorithme au cas o`u les valeurs de billets ou pi`eces disponibles sont
en nombre quelconque et figurent dans un tableau `a valeurs d´ecroissantes val[0],
val[1], ..., val[k-1]. Ainsi dans l’exemple consid´er´e plus haut on aurait : k=3
et val[0] = 50, val[1] = 20, val[2] = 10.
Il faut `a chaque tour de boucle retrouver la valeur de billet la plus grande inf´erieure `a
s.
k = 0;
while (s > 0) {
while (val[k] > s) k++;
tab[k]++;
s = s- val[k];
}
Afficher(tab);
4. Montrer qu’ il existe des valeurs de billets et une somme `a rendre pour lesquels cet
algorithme ne donne pas le nombre minimum de billets ou pi`eces `a rendre.
Il y a en effet des cas o`u cet algorithme ne donne pas le plus petit nombre de billets `a
rendre, par exemple si on dispose de billets de 50, 20, 12, 1, et que la somme `a rendre
est de 24, l’algorithme donnera 5 billets `a rendre (1 de 20 et 4 de 1) alors que l’on peut
faire avec 2 billets de 12.
Cette situation ne se produit pas si chaque valeur de billet est sup´erieure ou ´egale au
double de la valeur du billet imm´ediatement inf´erieure.
2 Calcul de la puissance ni`eme
1. ´
Ecrire un algorithme permettant de calculer rapidement la puissance ni`eme d’un nom-
bre entier en s’inspirant de l’algorithme vu en cours pour la repr´esentation d’un nombre
en base 2.
On suppose que l’on veut ´elever a`a la puissance n,ns’´ecrit en base 2 par;
n=
p
X
k=1
xk2k
o`u les xkont pour valeur 0 ou 1.
On a alors
an=
p
Y
k=1
(a2k)xk
Ainsi on calcule les puissances a2kde aen effectuant les carr´es successifs des valeurs
trouv´ees et on multiplie le r´esultat partiel par la valeur obtenue si et seulement si
xk= 1. Soit:
2