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 :

Combinaisons de pièces pour faire 1€


Sujet :

C++

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut Combinaisons de pièces pour faire 1€
    Bonjour, en TP je devais faire la liste des combinaisons possibles de pièces de 2, 5, 10, 20 et 50 centimes pour arriver a 1€.
    J'ai fait le code suivant, seulement ma récurrence est infinie. Pourtant, je ne vois pas mon erreur, étant encore novice en C++, votre aide serait la bienvenue

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #include <stdlib.h>
    #include <stdio.h>
     
    const int cp1 = 2, cp2=5, cp3 = 10, cp4 = 20, cp5 = 50;
     
    void afficher(int p1, int p2, int p3, int p4,int p5);
    void frec(int p1, int p2, int p3, int p4, int p5);
     
    int total = 0;
     
    int main()
    {
    /*Ecrivez un programme qui affiche toutes les manières possibles d’obtenir un Euro avec des
    pièces de 2, 5, 10, 20 et 50 centimes. Dire combien de possibilités ont été ainsi trouvées. Les
    résultats seront affichés comme suit :*/
    frec(0,0,0,0,0);
    system("pause");
    }
     
    void afficher(int p1, int p2, int p3, int p4,int p5)
    {
        fflush(stdout);
        total++;
        printf("%d : %d x %d   %d x %d   %d x %d   %d x %d   %d x %d \n", total, p1, cp1, p2, cp2, p3, cp3, p4, cp4, p5, cp5);
        //system("pause");
    }
    void frec(int p1, int p2, int p3, int p4, int p5)
    {
        //afficher(p1, p2, p3, p4, p5);
        if ((p1*cp1+p2*cp2+p3*cp3+p4*cp4+p5*cp5) > 100)
        {
            //system("pause");
            return;
        }
        else if ((p1*cp1+p2*cp2+p3*cp3+p4*cp4+p5*cp5) == 100)
        {
           afficher(p1, p2, p3, p4, p5); 
        }
        else
        {
            frec(p1+1, p2, p3, p4, p5);
            frec(p1, p2+1, p3, p4, p5);
            frec(p1, p2, p3+1, p4, p5);
            frec(p1, p2, p3, p4+1, p5);
            frec(p1, p2, p3, p4, p5+1);
        }
    }
    Merci d'avance !

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    A froid, cela me parait plus un problème d'algorithmique appliqué au C (tu n'utilises rien de propre au C++).

    Sinon, ta solution me semble marcher, par contre certaines branches seront explorées plusieurs fois. D'où tes solutions en 42000 exemplaires.
    Tu peux stocker les chemins par lesquels tu passes (196 solutions sur 1172 chemins explorés (j'ai pu me tromper)), remarquer qu'il n'est pas nécessaire de tout le temps incrémenter de 1, ... Ou peut-être repenser ta récursivité?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut
    Ah en fait j'avais pas pensé que le fait de décaler comme cela ça feras des croisement... j'ai rechanger l'algorithme ça semble marcher ...

  4. #4
    Membre averti
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Points : 307
    Points
    307
    Par défaut
    En tout cas ça ressemble pas mal au problème 147 du site ACM
    http://acm.uva.es/p/v1/147.html mais en plus simple.

    Si tu veux t'amuser, essaye le

Discussions similaires

  1. a=1 b=5 c=10 trouver combinaison pour faire proche de 57
    Par scapu dans le forum Langages serveur
    Réponses: 2
    Dernier message: 20/05/2011, 08h26
  2. Éditeur utilisé pour faire du HTML
    Par mio dans le forum Balisage (X)HTML et validation W3C
    Réponses: 295
    Dernier message: 22/12/2008, 15h21
  3. Quels outils logiciels utiliser pour faire son site ?
    Par tripper.dim dans le forum Outils
    Réponses: 36
    Dernier message: 22/05/2008, 18h39
  4. quel langage choisir pour faire de script sous windows
    Par pas05 dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 18/11/2002, 22h42
  5. Réponses: 2
    Dernier message: 11/07/2002, 08h31

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