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 quek > 0
.
Example
>>> produit_maxi([0, 1, 2, 3, 2, 1, 0], 3)
12
>>> produit_maxi([0, 1, 2, 3, 2, 1, 0], 1)
3
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-nl bksl-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-nl bksl-nl x = valeurs[i - k]bksl-nl if x == 0:bksl-nl nbpy-undzeros -= 1bksl-nl else:bksl-nl produit //= xbksl-nl bksl-nl if nbpy-undzeros == 0 and produit > maxi:bksl-nl maxi = produitbksl-nl bksl-nl return maxibksl-nlbksl-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-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
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