1`ere Ann´ee ENSEIRB option Telecom
Algorithmique et structure de donn´ees
Devoir d’entraˆınement (facultatif) `a rendre le 13 octobre.
1 Permutations
Une permutation αde Snest une suite de nnombres entiers
α=a0, a1, . . . , an1
tous diff´erents et compris entre 0 et n1.
On pourra consid´erer aussi αcomme une bijection de {0,1, . . . , n 1}dans lui mˆeme
et on notera ainsi ai=α(i).
1. Une descente dans une permutation est un entier itel que ai> ai+1 ´
Ecrire un
algorithme qui ´etant donn´ee une permutation repr´esent´ee par un tableau alpha
affiche le nombre de ses descentes. Par exemple si la donn´ee est le tableau
i 0 1 2 3 4 5 6 7 8
alpha[i] 725063418
l’algorithme doit afficher 4.
2. Une inversion dans une permutation est un couple i, j tel que i<jet ai> aj.
par exemple, le nombre d’inversions de la permutation donn´ee plus haut est 18.
On vous demande d’´ecrire un algorithme qui affiche le nombre d’inversions d’une
permutation repr´esent´ee par son tableau.
3. Ecrire un algorithme qui v´erifie si un tableau de taille donn´ee nrepr´esente bien une
permutation, c’est `a dire s’il contient bien tous les nombres entiers compris entre
0 et n1. La donn´ee sera un tableau et l’algorithme devra afficher est ou n’est
pas une permutation.
4. Un cycle dans une permutation est une suite de nombres i1, i2, . . . , iptels que α(ij) =
ij+1 pour j= 1,...p1 et α(ip) = i1. Par exemple la permutation ci-dessus a 3
cycles qui sont
(0,7,1,2,5,3)(4,6) et (8).
On vous demande d’´ecrire un algorithme qui d´etermine le nombre de cycles d’une
permutation donn´ee par un tableau. On utilisera un tableau auxiliaire vu contenant
des bool´eens tous initialis´es `a false, et tel que vu[i] est mis `a true quand on
consid`ere l’´element idans l’ensemble des cycles parcourus.
1
2 Rendre la monnaie
On vous propose d’´ecrire un algorithme permettant d’obtenir la suite des billets totalisant
une somme donn´ee (dont on suppose qu’elle est un multiple de 10). Les esp`eces disponibles
sont des billets de 50, 20 et 10 euros. Le principe est de donner le billet de valeur la plus
grande possible inf´erieure ou ´egale `a la somme `a rendre et de poursuivre la mˆeme strat´egie
avec la somme restante jusqu’`a ce que la somme restante soit nulle.
1. ´
Ecrire cet algorithme en utilisant les structures de contrˆole suivantes : while ,
if et else if . L’algorithme utilisera une variable nomm´ee squi contiendra
la somme restant `a rendre au fur et `a mesure de la remise de billets au client. On
n’utilisera comme op´erations arithm´etiques que des additions ou des soustractions.
Le r´esultat sera l’affichage de la suite des nombres de billets `a rendre.
Par exemple si la somme est 180, l’affichage devra ˆetre :
3 billets de 50 euros
1 billet de 20 euros
1 billet de 10 euros
2. D´eterminer le nombre de soustractions effectu´ees par l’algorithme ; on donnera une
formule faisant intervenir des divisions enti`eres par les nombres 50, 20 et 10.
3. On souhaite d´emontrer que pour toute somme s(multiple de 10) le nombre de
billets obtenus par l’algorithme pr´ec´edent est le plus petit possible. Pour cela vous
consid´ererez les 5 possibilit´es de la valeur du reste de la division par 50 de la somme
s.
4. G´en´eraliser votre algorithme de d´etermination du nombre de billets `a rendre au cas
o`u les valeurs de billets 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=3et val[0] = 50, val[1] = 20,
val[2] = 10.
5. 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 `a rendre.
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !