Menu


1NSI

Les exercices python à connaître

programme de première
E1:listes
E2:listes
E3:listes
E4:tri par insertion
E5:tri par séléction
E6:dictionnaires / string
E7:tuple
E8:boucle / booléen / liste
E9:string
E10:dictionnaire / fonctions
E11:booléens / listes
récursivité
E1:somme d'entiers
E2:chiffres romains
E3:factorielle
E4:rendu de monnaie
POO
E1:la classe Chien
E2:carrés semi-magiques
E3:filtre sur une pile
E4:durées en POO
Arbres
E1: Hauteur et taille d'un arbre
E2: parcours 1
E3: parcours 2
E4: Recherche dans un ABR
E5: Arbre binaire additif
E6: Arbre binaire de recherche
Diviser pour régner
E1:sommet d'un tableau
E2:Indice d'une panne
E3:calcul d'une puissance
Sécurisation des communications
E1:code César
E2:Vigenre
programmation dynamique
E1:Nombres de Delannoy
E2:Communication des acacias
E2:Mineur (le meilleur filon)

Communication des acacias

Une des observations les plus anciennes a été faite sur les girafes par Wouter Van Hoven. Il a étudié pendant 2 ans le comportement des girafes dans un parc national en Afrique du Sud. Les girafes ingurgitent environ 80 kg de feuilles par jour. Pourtant, lorsqu'elles arrivent sur un acacia, elles ne restent que quelques minutes, broutent que quelques feuilles puis vont vers un autre arbre. L'arbre a réagi à la présence de la girafe en secrétant des tanins. Ce sont des molécules amères et toxiques pour les girafes. Mais en même temps, l'acacia va émettre de l'éthylène, qui est un gaz qui va se déplacer dans l'air et informer les autres arbres qu'un prédateur est là. Que vont faire les autres arbres ? Ils vont augmenter de manière préventive leur teneur en tanin et se préparer à l'arrivée des girafes.

On vous donne une liste de quantités de feuilles que pourrait manger une girafe sur un arbre à un indice donné le long d'une ligne d'acacias. La seule contrainte, c'est que la girafe ne peut pas manger les feuilles sur deux arbres consécutifs, mais souhaite en manger le plus possible. Écrire une fonction qui indique quelle quantité totale la girafe peut ingurgiter.

Exemples :
>>> feuilles = [4, 25, 20, 8, 17]
>>>> max_manger(feuilles)
42

La girafe peut manger 25 + 17 = 42 feuilles au maximum.
Prendre 4 + 20 + 17 n'en donne que 41.


>>> feuilles = [4, 6, 5, 7, 4]
>>>> max_manger(feuilles)
13

La girafe peut manger 4 + 5 + 4 = 13 ou bien 6 + 7 = 13 feuilles au maximum.

Votre solution doit pouvoir être efficace même avec de grands tableaux. Il est demandé d'utiliser une programmation dynamique.

Vous trouverez des indices pourvous aider sous la console Python

source : https://codex.forge.apps.education.fr

Indice 1 :
On peut envisager de savoir combien la girafe a pu manger au maximum en arrivant à un arbre i :

  • sans avoir mangé sur le précédent, auquel cas elle pourra manger ici, en i
  • en ayant mangé au précédent, auquel cas elle ne pourra manger ici, en i

Indice 2 :
On utilisera deux variables :

  • maxi_sans_i : la quantité maximale que la girafe peut manger sans pouvoir manger à la position i,
  • maxi_avec_i : la quantité maximale que la girafe peut manger avec la position i dévorée.

Indice 3 :

  • On gèrera les cas avec peu d'arbres. Aucun arbre ; aucune feuille.
  • On initialisera correctement les variables.
  • On mettra en place avec prudence la boucle qui permet de progresser jusqu'au bout de la file d'arbres.