Recherche des combinaisons pour le jeu des nombres fléchés

Soyez le premier à donner votre avis sur cette source.

Vue 4 429 fois - Téléchargée 260 fois

Description

Trouver toutes les combinaisons de 5 chiffres différents dont la somme est 25, c'est très dur de tête. Il y en a 12 et chercher celles qui contiennent 1 et 7 ???
C'est ce qu'il faut faire quand on essaye de remplir une grille de "Nombres Fléchés".
Le présent programme vous aidera à trouver toutes ces combinaisons.

Si qq'un trouve une méthode récursive de calcul, je suis preneur.
JPP

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Vb Lover
Messages postés
221
Date d'inscription
vendredi 30 novembre 2001
Statut
Membre
Dernière intervention
13 février 2010
3 -
Je suis en train de programmé la méthode récursive. Mais auparavant je tiens à te proposer une modification simple :
quand tu testes si la somme est trop grande/petite pour le nombre de chiffres donnés, tu peux utiliser la relation :

1+2+3+...+k = k*(k+1) / 2

donc :

Min = k*(k+1) / 2
Max = 10*k - Min

ça t'évitera de faire des boucles !
Vb Lover
Messages postés
221
Date d'inscription
vendredi 30 novembre 2001
Statut
Membre
Dernière intervention
13 février 2010
3 -
et voilà !!

' -------------------------------------------------------------------
' Nom : Combinaisons
' Desc : Cherche k nombres différents, inférieurs ou égaux à N,
' tels que leur somme soit égale à Somme
' -------------------------------------------------------------------
Private Sub Combinaisons( _
ByVal Somme As Integer, ByVal k As Integer, ByVal N As Integer, _
Optional ByVal strComb As String = "")
Dim Min As Integer, Max As Integer
Dim i As Integer

Min = k * (k + 1) / 2
Max = (N + 1) * k - Min
If Somme < Min Or Somme > Max Then ' somme possible ou non
If strComb = "" Then MsgBox "Somme impossible à trouver"
Exit Sub
End If

If k = 1 Then ' fin de la récursivité
If Somme <= N Then ' combinaison trouvée
strComb = strComb & CStr(Somme)
frmMain.Print strComb
End If
Else ' lance la récursivité
Max = Somme - k * (k - 1) / 2
Min = (2 * Somme - Max) / k
For i = Max To Min Step -1
Combinaisons Somme - i, k - 1, i - 1, _
strComb & CStr(i) & ","
Next
End If

End Sub
' ------------------------------------------------------------

il est un peu plus court, non ?? et il n'est pas limité aux chiffres de 1 à 9 !

Pour ton cas, il suffit de lancer

Combinaisons Somme, nombre_chiffre, 9

et au lieu de faire print... de les mettre dans ta listBox
mbash
Messages postés
3
Date d'inscription
jeudi 13 mai 2004
Statut
Membre
Dernière intervention
21 mai 2004
-
Excellente la récursivité. Cependant je recherche un peu la même chose, mais cette fois en incluant le 0 et les éléments tous supérieurs ou égaux quand triés par ordre croissant). Par exemple je veux trouver pour la somme 5 les quintuplets suivants : (00005),(00014),(00023),(00113),(00122),(01112)et(11111).
Une idée ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (cs_jppompon)