Combinaison de chiffres pour trouver Somme !!!

RENAUDER

Nous a quitté
Repose en paix
Bonjour,

N'ayant rien trouvé sur Internet, je fais appel aux matheux car je ne sais résoudre ce problème (si c'est résolvable?).

Peux importe la méthode, c'est le résultat qui m'intéresse.

J'ai un certain nombre de chiffres à savoir par exemple:
1, 5, 10, 8, 7
Je veux savoir quelle(s) combinaison(s) de ces chiffres peux m'amener à trouver une somme de 15.

Par rapport à l'exemple:
5 et 10
8 et 7
D'avance merci.
 

jeanpierre

Nous a quitté
Repose en paix
Re : Combinaison de chiffres pour trouver Somme !!!

Re,

Curieux car je l'ai déjà utilisé sous 2003 sans aucun problème.

Néanmoins tu as tout ce qu'il faut dans le code que tu peux adapter selon la source du plantage.

Bon après-midi.

Jean-Pierre
 

kjin

XLDnaute Barbatruc
Re : Combinaison de chiffres pour trouver Somme !!!

Bonjour,
J'essaierais peut-être comme ceci
Code:
Sub renauder()
T = Array(1, 5, 10, 8, 7)
    For i = LBound(T) To UBound(T)
        For j = i + 1 To UBound(T)
        If T(i) + T(j) = 15 Then résultat = résultat & T(i) & "+" & T(j) & ","
        Next
    Next
    MsgBox Left(résultat, Len(résultat) - 1)
End Sub
A+
kjin
 

RENAUDER

Nous a quitté
Repose en paix
Re : Combinaison de chiffres pour trouver Somme !!!

Bonjour,
Félicitations à CBernardT pour ce programme qui d'après quelques tests me semble parfait
Comme je suis curieux, je vais l'exécuter en pas à pas pour bien en comprendre le fonctionnement et de ce fait continuer à approfondir mes connaissances.
Encore merci
 

ROGER2327

XLDnaute Barbatruc
Re : Combinaison de chiffres pour trouver Somme !!!

Bonjour à tous
Une bricole loin des usines à gaz :
Code:
[COLOR="DarkSlateGray"][B]Sub toto()
Dim bse, lng As Long, cpt As String, x As Long, u As Long, sol As String
Dim i As Long, j As Long
   bse = Selection.Value
   lng = UBound(bse, 2) - LBound(bse, 2)
   u = bse(1, UBound(bse, 2))
   cpt = String(lng, "0")
   For i = 0 To 2 ^ lng - 1
      cpt = ""
      For j = 0 To lng - 1
         cpt = cpt & (i \ (2 ^ j)) Mod 2
      Next j
      x = 0
      For j = 1 To lng
         x = x + CLng(Mid$(cpt, j, 1)) * bse(1, j)
      Next j
      If x = u Then
         sol = u & "="
         For j = 1 To lng
            If CLng(Mid$(cpt, j, 1)) Then sol = sol & bse(1, j) & "+"
         Next j
         MsgBox Left$(sol, Len(sol) - 1)
      End If
   Next i
End Sub[/B][/COLOR]

Mode d'emploi :
Mettre la liste des nombres à sommer dans des cellules contigües d'une ligne et compléter la liste par la valeur à atteindre dans la première cellule vide à droite.
Sélectionner l'ensemble des données et exécuter la procédure.

Par exemple : 1, 5, 7, 8, 10 de C2 à G2, 15 en H2.
Sélectionner C2:H2 et exécuter la procédure.

(C'est brut de décoffrage : on doit pouvoir faire plus court.)
ROGER2327
#2284
 

RENAUDER

Nous a quitté
Repose en paix
Re : Combinaison de chiffres pour trouver Somme !!!

Bonsoir Roger,
Plus court, c'est déjà court mais là ça se complique.
Je suis en train de chercher à comprendre avec cette chaine de 0 et 1, ça me rappelle les tableaux de Karnaugh en automatisme mais c'est bien loin.
 

CBernardT

XLDnaute Barbatruc
Re : Combinaison de chiffres pour trouver Somme !!!

Bonsoir,

Salut Roger,

Outre l'intérêt à trouver tous les arrangements de nombres dont la somme est égal à la valeur en C4, l'algorithme de Ti a l'avantage de définir les arrangements en fonction du nombre de valeurs souhaité et précisé en cellule C6, en prenant en compte les signes = < ou > .

"L'usine à gaz" me paraît être un mot bien excessif et péjoratif ! Ce code se veut accessible aux forumeurs débutants. Il peut certainement être épuré mais le principe de base reste le même que ton code.
 

ROGER2327

XLDnaute Barbatruc
Re : Combinaison de chiffres pour trouver Somme !!!

Re...
Bonsoir,

Salut Roger,

Outre l'intérêt à trouver tous les arrangements de nombres dont la somme est égal à la valeur en C4, l'algorithme de Ti a l'avantage de définir les arrangements en fonction du nombre de valeurs souhaité et précisé en cellule C6, en prenant en compte les signes = < ou > .

"L'usine à gaz" me paraît être un mot bien excessif et péjoratif ! Ce code se veut accessible aux forumeurs débutants. Il peut certainement être épuré mais le principe de base reste le même que ton code.
Bonsoir CBernardT
Désolé de vous avoir choqué. Je ne donne pas de sens péjoratif à usine à gaz, et j'emploie même parfois ce terme avec un sentiment d'admiration lorsqu'une procédure compliquée donne des résultats complets, ce qui est le cas de la vôtre. Ici, je l'ai employé en comparaison avec la procédure minimaliste que je proposais, en notant d'ailleurs qu'il s'agissait d'un produit brut de décoffrage par rapport à d'autres productions bien plus élaborées. J'ai souvent l'occasion de vous croiser au hasard des discussions et je prends connaissance de vos propositions avec intérêt. Je ne voudrais pas qu'il y ait de malentendu entre nous et, si j'ai été maladroit, je vous demande de m'en excuser.​
Cordialement,
ROGER2327
#2287
 

ROGER2327

XLDnaute Barbatruc
Re : Combinaison de chiffres pour trouver Somme !!!

Re...
Bonsoir Roger,
Plus court, c'est déjà court mais là ça se complique.
Je suis en train de chercher à comprendre avec cette chaine de 0 et 1, ça me rappelle les tableaux de Karnaugh en automatisme mais c'est bien loin.
Bonsoir RENAUDER
Ne cherchez pas trop, car cette chaîne n'a aucun intérêt. Voici une version du code sans elle :
Code:
[COLOR="DarkSlateGray"][B]Sub tata()
Dim bse, lng As Long, x As Long, u As Long, sol As String
Dim i As Long, j As Long
   bse = Selection.Value
   lng = UBound(bse, 2) - LBound(bse, 2) - 1
   u = bse(1, UBound(bse, 2))
   For i = 0 To 2 ^ (lng + 1)
      x = 0
      For j = 0 To lng
         If (i \ (2 ^ j)) Mod 2 Then x = x + bse(1, j + 1)
      Next j
      If x = u Then
         sol = u & "="
         For j = 0 To lng
            If (i \ (2 ^ j)) Mod 2 Then sol = sol & bse(1, j + 1) & "+"
         Next j
         MsgBox Left$(sol, Len(sol) - 1)
      End If
   Next i
End Sub[/B][/COLOR]
Mode d'emploi identique à celui du précédent.​
ROGER2327
#2288
 

CBernardT

XLDnaute Barbatruc
Re : Combinaison de chiffres pour trouver Somme !!!

Rebonsoir Roger,

Tu n'as pas à t'excuser, disons que je n'ai pas la même interprétation de l'expression "Usine à Gaz" !

De mémoire, autrefois, l’expression « USINE A GAZ », caractérisait les machines qui prenaient beaucoup de place et d’aspect complexe, comme par exemple, une raffinerie avec une multitude de tuyaux en tous sens dont la destination mystérieuse intrigue l’observateur profane. Aujourd'hui, à mon humble avis, elle caractérise également un programme qui renferme de multiples fonctions, toutes n'étant pas nécessairement indispensables et manquant de concision.

Je te retourne également le compliment pour la prolificité dont tu fais preuve sur ce forum et ta pugnacité à aller au fond des choses.

Au plaisir de te lire.
 

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 097
Membres
103 116
dernier inscrit
kutobi87