Aller au contenu

Index des sujets 2022

Corrigé sujet 31 - Année : 2022

Sujet 31 - 2022

Exercice 1

1
2
3
4
5
6
def recherche(a,t):
    nb_occurence = 0
    for elt in t:
        if elt==a:
            nb_occurence +=1
    return nb_occurence

Commentaires

C'est un exercice classique de parcours d'un itérable en comptant les occurrences d'apparition d'une valeur. Un parcours par élément suffit, les indices des occurrences n'étant pas utilisées.

Exercice 2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def rendu_monnaie_centimes(s_due, s_versee):
    pieces = [1, 2, 5, 10, 20, 50, 100, 200]
    rendu = [] #(1)
    a_rendre = s_versee - s_due #(2)
    i = len(pieces) - 1
    while a_rendre > 0 : #(3)
        if pieces[i] <= a_rendre :
            rendu.append(pieces[i]) #(4)
            a_rendre = a_rendre - pieces[i]
        else :
            i = i-1
    return rendu
  1. La liste des pièces à rendre, initialisée à []
  2. La somme à rendre, initialisé à s_versee - s_due
  3. La condition d'arrêt, plus rien à rendre
  4. C'est l'algorithme glouton classique pour le rendu de monnaie (les pieces sont rangées dans l'ordre). Si la pièce est inférieure à la somme à rendre, on l'ajoute au rendu et on diminue la somme à rendre. Sinon on passe à la pièce suivante.

Attention

  1. On utilise ici une liste de pièces classées par ordre croissant de valeurs, cela oblige donc à commencer par la fin de la liste. C'est ce qui explique le parcours de la liste "à l'envers" : initialisation de i à len(pièces)-1 puis décrémentation de i.
  2. La fonction utilise deux arguments s_versee et s_due pour calculer la somme à rendre (s_versee-s_due), on pourrait directement une fonction qui prend en argument la somme à rendre.