IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Calcul de toutes les combinaisons de N parmi K


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 98
    Par défaut Calcul de toutes les combinaisons de N parmi K
    Bonjour a tous :-)
    je dis pour les experts car cela ne me semble pas evident .
    voila le probleme a resoudre ,je souhaiterais generer toutes combinaisons de N parmi K ( en realité N varie de 25 a 90 et K de 4 a 25 et il est la mon probleme)
    prenon l'exemple du loto que vous connaissez bien le programme pour generer les combis est tres simple sous devcpp)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include<stdio.h>
    #include <stdlib.h>
    #include <dos.h>
    #include <time.h>
     
     
    main()
    {
    int zz=0,a=0,i=0,j=0,k=0,l=0,m=0,n=0,tc[6],touche=0;
    int nt=0;
     
    printf("entrez votre valeur   ");
    			scanf("%d",&nt);
     
                       a=nt-5;
     
    				  for(i=1;i<=a;i++)
    				  for(j=i+1;j<=a+1;j++)
    				  for(k=j+1;k<=a+2;k++)
    				  for(l=k+1;l<=a+3;l++)
    				  for(m=l+1;m<=a+4;m++)
    				  for(n=m+1;n<=a+5;n++)
    		   {
     
    				 tc[0]=i;tc[1]=j;tc[2]=k;tc[3]=l;tc[4]=m;tc[5]=n;
    				 printf("%d %d %d %d %d %d \n",tc[0],tc[1],tc[2],tc[3],tc[4],tc[5]);
    				 zz++;
     
     
    		   }
    		   printf("nombre de combinaisons %d ",zz);
    		   scanf("%d",&touche);
    		   getchar();
    }
    maintenant comme mes valeurs contrairement au loto varie je suis obliger de changer le code a chaque fois ,de plus si k = 20 par exemple cela m'oblige a creer 20 boucles imbriquées alors voici ma question :
    je sais qu'il est possible d'eviter toutes ses boucles en creant ce qu'on appelle une boucle dynamique donc en theorie avec une seule boucle il est possible de sortir toutes les combinaisons de N parmi K ( ou l'inverse je ne me souviens plus de la formulation mais bon vous aurez compris ;-) )
    supposons que je veuille sortir toutes les combinaisons de 15 chiffres parmi 70 cela m'oblige a creer 15 boucles bref et a chaque fois je doit allez dans mon programme pour changer les valeurs bref pas evident ( en tous cas pour moi ;-) )
    pouvez vous m'aider ?
    cordialement

  2. #2
    Membre émérite
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Par défaut
    Salut !

    Citation Envoyé par zhao
    supposons que je veuille sortir toutes les combinaisons de 15 chiffres parmi 70 cela m'oblige a creer 15 boucles bref et a chaque fois je doit allez dans mon programme pour changer les valeurs bref pas evident
    Je doit dire que j'ai pratiqument rien compris de ce que tu veux faire

    Et ton code n'est pas très claire (Faut donner un nom significatif aux variables) !

    en tout les cas, la combinaison me fais rappeler la formule :Combinaison(K,N)= N!/(K!*(N-K)!)


    Si tu veux bien donner un exemple concré de ce que tu veux, pour pouvoir essayer de t'aider.







    Bonne chance !




    (Esque'il faut que je sois un expert pour comprendre ?)

  3. #3
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Ça me semble être une question d'algorithmique, pas de C. Demande qu'on déplace le sujet.

    La récursivité peut t'aider. Je dois avoir expliqué cela en détail dans ce forum (celui de C), il n'y a pas si longtemps.

    Voir aussi http://www-cs-faculty.stanford.edu/~knuth/fasc3a.ps.gz pour plus de choses que tu n'en désires peut-être.

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Déjà s'il y'a de la factorielle dans l'air, le mieux est d'opter pour de la récursivité. J'en ai écrit un petit tutoriel y'a pas si longtemps, si ca peut aider: Récursivité en Langage C
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 98
    Par défaut
    merci pour vos reponses :-)

    bon deja je suis pas sur que la recursivité peut resoudre mon probleme mais si c'est le cas je suis preneur .

    ensuite pour Interruption13h voici un exemple .
    avec le petit programme que j'ai poster plus haut si je donne a "NT" la valeur 8 je vais avoir toutes les combinaisons de 6 chiffres parmi 8
    donc
    1 2 3 4 5 6
    1 2 3 4 5 7
    1 2 3 4 5 8
    1 2 3 4 6 7
    .........
    .........
    3 4 5 6 7 8

    j'ai pris l'exemple du loto car pour les combinaisons c'est ce qui me semblais le plus parlant pour un francais ;-)
    mais si par exemple je veux generer toutes les combinaisons de 10 chiffres parmi 50 je suis obliger de changer mon code et faire 10 boucles , voila il est la mon probleme comment generer toutes les combinaisons de X parmi Y quelque soit X et Y sans etre obliger de changer mon code a chaque fois ,je crois qu'il est possible de faire cela avec une seule boucle qu'on nomme boucle dynamique bref pouvez vous m'aider ?
    cordialement

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par zhao
    bon deja je suis pas sur que la recursivité peut resoudre mon probleme mais si c'est le cas je suis preneur .
    http://www.developpez.net/forums/sho...04&postcount=5

  7. #7
    Membre émérite
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Par défaut
    Salut !

    Citation Envoyé par zhao
    merci pour vos reponses :-)

    bon deja je suis pas sur que la recursivité peut resoudre mon probleme mais si c'est le cas je suis preneur .

    ensuite pour Interruption13h voici un exemple .
    avec le petit programme que j'ai poster plus haut si je donne a "NT" la valeur 8 je vais avoir toutes les combinaisons de 6 chiffres parmi 8
    donc
    1 2 3 4 5 6
    1 2 3 4 5 7
    1 2 3 4 5 8
    1 2 3 4 6 7
    .........
    .........
    3 4 5 6 7 8

    j'ai pris l'exemple du loto car pour les combinaisons c'est ce qui me semblais le plus parlant pour un francais ;-)
    mais si par exemple je veux generer toutes les combinaisons de 10 chiffres parmi 50 je suis obliger de changer mon code et faire 10 boucles , voila il est la mon probleme comment generer toutes les combinaisons de X parmi Y quelque soit X et Y sans etre obliger de changer mon code a chaque fois ,je crois qu'il est possible de faire cela avec une seule boucle qu'on nomme boucle dynamique bref pouvez vous m'aider ?
    cordialement

    Et le 876543 ,222222 ? autrement dis ,esque c'est une combinaison répétitif ?


    Je suis pas français et j'ai jamais joué au loto

    A+

  8. #8
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 98
    Par défaut
    repetitif ? be non jai mis un exemple plus haut avec 8 numeros ou alors je me suis mal exprimer ,si par exemple NT=7 alors j'aurais comme resulat de 6 parmi 7 ceci et uniquement ceci :

    1 2 3 4 5 6
    1 2 3 4 5 7
    1 2 3 4 6 7
    1 2 3 5 6 7
    1 2 4 5 6 7
    1 3 4 5 6 7
    2 3 4 5 6 7

    cela est plus simple que des explication ou je suis capable de dires des anneries ;-)

  9. #9
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Interruption13h
    Et le 876543 ,222222 ? autrement dis ,esque c'est une combinaison répétitif ?
    Les répétitions ne sont pas autorisées et l'ordre n'a pas d'importance.

Discussions similaires

  1. Calcul de toutes les combinaisons possibles
    Par fighterof68 dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 14/01/2015, 14h27
  2. toutes les combinaisons possibles
    Par marocleverness dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 29/05/2006, 00h11
  3. retouver toute les combinaison
    Par sami_c dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 22/03/2006, 20h09
  4. [VB] Calcul de toute les possibilité
    Par Stan Trinity dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/11/2005, 15h31
  5. Lister toutes les combinaisons...
    Par monstroplante dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 04/11/2005, 21h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo