• Aucun résultat trouvé

A725. Huit sacs Problème proposé par Augustin Genoud

N/A
N/A
Protected

Academic year: 2022

Partager "A725. Huit sacs Problème proposé par Augustin Genoud"

Copied!
2
0
0

Texte intégral

(1)

A725. Huit sacs

Problème proposé par Augustin Genoud

Huit sacs, A, B, C, D, E, F, G et H, contiennent chacun 100 billes. Six sacs ont uniquement des billes de 10 g. Un sac ne contient que des billes de 11 g et un autre sac ne renferme que des billes de 9 g. Afin de déterminer le poids des billes de chaque sac, on extrait a billes du sac A, b billes du sac B, c billes du sac C, d billes du sac D, etc. Ensuite, on procède à une seule pesée en mettant

l’ensemble des billes extraites sur une balance électronique.

Sans perte de généralité, on retient 0 ≤ a ≤ b ≤ c ≤ …. ≤ h.

Déterminer le nombre de billes qu'il convient d'extraire de chaque sac dans les deux cas suivants : - le nombre total de billes sorties des sacs est le plus petit possible.

- le terme h est le plus petit possible.

Solution proposée par Claudio Baiocchi

Un des choix pour lesquels le nombre total de billes sorties des sacs est le plus petit possible est donné par (somme 113, élément maximum 39).

Un des choix pour lequel le terme est le plus petit possible est (somme 155, mais élément maximum 34).

On va noter F et respectivement la famille des nombres choisis et leur somme; à savoir on pose F . Naturellement la famille F contient à la fois le nombre (nombre de billes tirées du sac léger) et le nombre (nombre de billes tirées du sac lourd) ; et le résultat de la pesée satisfera . De là on sera en mesure de retrouver les deux valeurs si et seulement si, lorsque varient dans la famille F avec , les différences sont toutes distinctes.

Une stratégie pour minimiser, suivant le cas, la somme ou l’élément maximum ne semble pas évidente ; il parait donc nécessaire faire recours à l’ordinateur.

Comme toujours, pour éviter d’écrire un programme « sans fin » il faudra imposer des bornes sur les valeurs à choisir (dans les deux cas : une valeur pour la somme des éléments de F , ou une valeur pour la valeur de ). Partant de la famille construite à la main, on pourrait suivant le cas opérer avec la restriction « somme au plus égale à 119 » ou bien avec la restriction « élément maximum au plus égal à 44 ».

On pourrait soupçonner que des bornes plus fines donneraient lieu à un programme plus performant mais, en réalité, le point délicat n’est pas sur les bornes initiales : d’un côté le

programme devrait mettre à jour les bornes au fur et à mesure et d’un autre côté il faut éviter de contrôler les différences sur l’octuplet tout entier. Lorsqu’on a fixé deux éléments, le troisième doit être choisi en imposant que les trois différences soient toutes différentes… Sinon on devrait

contrôler tout octuplet satisfaisant les bornes ; même sous des bornes très précises il s’agirait d’une énormité de cas !

(2)

La mise en pratique de ces principes se fait aisément si le langage de programmation admet la récursion, ce qui est le cas du langage Pascal. Les programmes ci-joints sont écrits en Dev-Pascal le langage le plus performant sur un PC.

Deux mots d’explication des programmes. Le vecteur diffUsed indique si une différence a déjà été utilisée ; un autre vecteur, nommé sacs est utilisé pour mémoriser les valeurs cherchées

; le cœur du programme est la procédure récursive next .

Dans le cas de minimisation de la somme cette procédure, à partir d’une valeur fixée pour sac[1]

(correspondant à a) construit pas à pas les valeurs de b,c,…h en fonction de la variable récursive level qui monte de 1 à 8 (pour l’autre problème on part de et la variable descend de 8 à 1).

La fonction allowed mérite une attention particulière : tout en utilisant une syntaxe déconseillée (car on emploie la commande exit à l’intérieur d’une boucle for ) elle indique si le nombre de billes qu’on voudrait extraire du sac courant est ou non compatible avec les nombres de billes déjà extraites des sacs précédents.

Références

Documents relatifs

Huit sacs, A, B, C, D, E, F, G et H, contiennent chacun 100 billes. Six sacs ont uniquement des billes de 10 g. Un sac ne contient que des billes de 11 g et un autre sac ne

Il convient donc de choisir les valeurs a à h de sorte que les différences 2 à 2 soient inégales et la différence i-j donnera les 2 sacs anormaux et le signe de i-j déterminera

Elle est obtenue en partant de 0, 1, 3, ce qui donne les différences 1, 2, 3 et en tentant ensuite de minimiser (empiriquement) la somme en prenant chaque fois la plus petite

Exemple 3 : la balance affiche 1194g ; on est encore au dessus de la moyenne avec un différentiel positif de 24g.. Le sac A reste

Si l’on a pris i billes dans le sac plus lourd et j dans le plus léger, on va constater un écart égal à i-j : ce résultat permettra d’identifier ces sacs si tous les écarts sont

Afin d'identifier les faux sacs en une seule pesée, il est nécessaire de construire une séquence dont les différences 2 à 2 sont distinctes deux à deux. Si on a une telle séquence,

Déterminer le nombre de billes qu'il convient d'extraire de chaque sac dans les deux cas suivants : - le nombre total de billes sorties des sacs est le plus petit possible.. - le

Q 3 Pour les plus courageux : combien de billes, au maximum, peut-il classer en 34 tests, dans le pire des cas et en appliquant la meilleure