Aller au contenu

Produit maximal de k termes consécutifs⚓︎

Écrire une fonction telle que produit_maxi(valeurs, k) renvoie le produit maximal de k facteurs positifs consécutifs dans une liste de valeurs.

On garantit que valeurs est de taille au moins égale à k et que k > 0.

Example
🐍 Console Python
>>> produit_maxi([0, 1, 2, 3, 2, 1, 0], 3)
12
>>> produit_maxi([0, 1, 2, 3, 2, 1, 0], 1)
3
###
# testsbksl-nlbksl-nlassert produitpy-undmaxi([0, 1, 2, 3, 2, 1, 0], 3) == 12bksl-nlassert produitpy-undmaxi([0, 1, 2, 3, 2, 1, 0], 1) == 3bksl-nlbksl-nlbksl-nl# autres testsbksl-nlbksl-nlassert produitpy-undmaxi([0], 1) == 0bksl-nlassert produitpy-undmaxi([0, 7], 1) == 7bksl-nlassert produitpy-undmaxi([7, 0], 1) == 7bksl-nlassert produitpy-undmaxi([5, 7], 1) == 7bksl-nlassert produitpy-undmaxi([7, 5], 1) == 7bksl-nlassert produitpy-undmaxi([5, 7], 2) == 35bksl-nlassert produitpy-undmaxi([7, 5], 2) == 35bksl-nlassert produitpy-undmaxi([1, 5, 7], 2) == 35bksl-nlassert produitpy-undmaxi([7, 5, 1], 2) == 35bksl-nlassert produitpy-undmaxi([0, 10, 2, 3, 2, 9, 0], 4) == 120bksl-nlassert produitpy-undmaxi([0, 9, 2, 3, 2, 10, 0], 4) == 120bksl-nlassert produitpy-undmaxi([2, 2, 2, 3, 2, 2, 2], 2) == 6bksl-nlassert produitpy-undmaxi([0, 2, 2, 0, 2, 2, 0], 3) == 0bksl-nlassert produitpy-undmaxi([0, 2, 2, 0, 2, 2, 1], 3) == 4bksl-nlbksl-nl ∞/∞

def produitpy-undmaxi(valeurs, k):bksl-nl ...bksl-nlbksl-nlbksl-nl# testsbksl-nlbksl-nlassert produitpy-undmaxi([0, 1, 2, 3, 2, 1, 0], 3) == 12bksl-nlassert produitpy-undmaxi([0, 1, 2, 3, 2, 1, 0], 1) == 3bksl-nlbksl-nldef produitpy-undmaxi(valeurs, k):bksl-nl nbpy-undzeros = 0bksl-nl produit = 1bksl-nl for i in range(k):bksl-nl x = valeurs[i]bksl-nl if x == 0:bksl-nl nbpy-undzeros += 1bksl-nl else:bksl-nl produit py-str= xbksl-nl if nbpy-undzeros == 0:bksl-nl maxi = produitbksl-nl else:bksl-nl maxi = 0bksl-nlbksl-nl for i in range(k, len(valeurs)):bksl-nl x = valeurs[i]bksl-nl if x == 0:bksl-nl nbpy-undzeros += 1bksl-nl else:bksl-nl produit py-str= xbksl-nlbksl-nl x = valeurs[i - k]bksl-nl if x == 0:bksl-nl nbpy-undzeros -= 1bksl-nl else:bksl-nl produit //= xbksl-nlbksl-nl if nbpy-undzeros == 0 and produit > maxi:bksl-nl maxi = produitbksl-nlbksl-nl return maxibksl-nlbksl-nl

A

Z

Indice 1

On pourra commencer par résoudre avant le problème k_somme.

On pourra commencer par faire le produit des valeurs non nulles parmi les k premières, ainsi que le nombre de zéros nb_zeros, pour initialiser une variable maxi.

On pourra ensuite faire une boucle sur les valeurs restantes qui met à jour ces deux variables.

Indice 2

On pourra s'aider du code à trou

🐍 Script Python
def produit_maxi(valeurs, k):
    nb_zeros = ...
    produit = ...
    for i in range(k):
        x = valeurs[i]
        if x == 0:
            nb_zeros = ...
        else:
            produit = ...
    if nb_zeros == 0:
        maxi = ...
    else:
        maxi = ...

    for i in range(..., ...):
        x = valeurs[i]
        if x == 0:
            nb_zeros = ...
        else:
            produit = ...

        x = valeurs[i - k]
        if x == 0:
            nb_zeros = ...
        else:
            produit = ...

        if nb_zeros == ... and produit > maxi:
            maxi = ...

    return maxi