Partage
  • Partager sur Facebook
  • Partager sur Twitter

Etude de marché - Franceioi

Sujet résolu
    31 mai 2020 à 3:02:52

    Bonjour,

    Je m'entraîne actuellement à coder du cpp sur France IoI et je suis actuellement bloqué sur un exercice.

    Mise en contexte :

    Afin de partir dans un long voyage, à la recherche de produits exotiques, les marchands prévoient toujours d'emmener avec eux des produits locaux afin de les vendre au cours du trajet. Pour décider quels produits emmener, ils ont fait une petite étude de marché auprès de la population, en demandant à chaque personne d'indiquer LE produit qu'elle serait prête à acheter (celui qu'elle préfère donc).

    Ce que doit faire votre programme :

    On vous donne le numéro du produit préféré par différentes personnes. Écrivez un programme qui indique pour chaque numéro de produit, le nombre de personnes dont c'est le produit préféré.

    Entrée

    Les deux premiers entiers à lire sont le nombre total de produits nbProduits et le nombre de personnes nbPersonnes (nbPersonnes <= 1000) ayant exprimé leur souhait.

    On lit ensuite nbPersonnes entiers : les numéros des produits préférés des différentes personnes. Les produits sont numérotés de 0 à nbProduits - 1.

    Sortie

    Vous devez afficher nbProduits entiers : pour chaque produit dans l'ordre de leur numéro, affichez le nombre de personnes qui le préfèrent.

    Exemple

    entrée :

    4
    10
    0
    2
    2
    1
    2
    2
    0
    2
    3
    0

    sortie :

    3
    1
    5
    1

    Mon programme est le suivant :

    #include <iostream>

    #include <cmath>

    #define repeat(nb) for (int _loop = 1, _max = (nb); _loop <= _max; _loop++)

    using namespace std;

    int main()

    {

       int nbProduits = 1, nbPersonnes;

       cin >> nbProduits >> nbPersonnes;

       int note[nbProduits] = {0};

       for (int boucle = 0; boucle < nbPersonnes; boucle = boucle + 1)

       {

          int avis;

          cin >> avis;

          note[avis] = note[avis] + 1;

       }

       for (int boucle = 0; boucle < nbProduits; boucle = boucle + 1)

       {

          int compteur = 0;

          cout << note[compteur] << endl;

          compteur = compteur + 1;     

       }

    }

    Et d'après le site mon programme est faux, voici l'erreur qu'il indique :
    Test 1Échec

    La réponse donnée par votre programme est incorrecte. Il a affiché :

    3
    3
    3
    3
    

    au lieu de :

    3
    1
    5
    1
    

    <input style="font-family: inherit; font-size: inherit; margin: 3px 0px;" type="button" value="Surligner le premier caractère différent" />

    0 %Test 2Échec

    La réponse donnée par votre programme est incorrecte.

    0 %Test 3Échec

    La réponse donnée par votre programme est incorrecte.

    0 %Test 4Échec

    Votre programme a dépassé la limite de temps : il est trop lent ou bien boucle indéfiniment.

    0 %Test 5Échec

    La réponse donnée par votre programme est incorrecte.

    0 %Test 6Échec

    La réponse donnée par votre programme est incorrecte.

    0 %Test 7Échec

    La réponse donnée par votre programme est incorrecte.

    0 %Test 8Échec

    La réponse donnée par votre programme est incorrecte.

    0 %Test 9Échec

    La réponse donnée par votre programme est incorrecte.

    0 %Test 10Échec

    La réponse donnée par votre programme est incorrecte.

    0 %Test 11Échec

    La réponse donnée par votre programme est incorrecte.

    0 %Test 12Échec

    La réponse donnée par votre programme est incorrecte.

    0 %Test 13Échec

    La réponse donnée par votre programme est incorrecte.

    0 %Test 14Échec

    La réponse donnée par votre programme est incorrecte.

    0 %TOTALÉchecVous avez réussi 0 test sur 14.0 %
    Merci d'avance aux personnes qui sauront me guider vers la résolutions de ce problème :) .
    • Partager sur Facebook
    • Partager sur Twitter
      31 mai 2020 à 5:35:03

      Tu as:
         for (int boucle = 0; boucle < nbProduits; boucle = boucle + 1) {
            int compteur = 0;
            cout << note[compteur] << endl;
            compteur = compteur + 1;     
         }
      Pourquoi utiliser 2 variables pour la même boucle?
      En remettant compteur à 0 à chaque tour de boucle, tu affiches toujours le même élément.
         for (int boucle = 0; boucle < nbProduits; boucle++) {
            cout << note[boucle] << endl;
         }
      Je ne sais pas quel cours ou quel tutoriel tu suis sur le langage c++, ni où tu es rendu dans le cours.
      Il m'apparaît que tu as fait un copier-coller de ton code.
      C'est correct si tu comprends ce que tu copies et si tu sais le modifier. Sinon, il vaut mieux s'abstenir.
      #include <cmath>   n'est pas nécessaire ici.
      #define repeat(nb) ...   n'est pas utilisé et je n'aime vraiment pas cette façon de faire.
      using namespace std;   pas recommandé pour les nouveaux standard de C++
      nbProduits n'a pas besoin d'être initialisé, il est lu sur la ligne suivante.
      Le vecteur 'note' est défini et réservé avec la technique du VLA (variable length array). Il vaudrait mieux utiliser le type 'vector'.
      > Votre programme a dépassé la limite de temps : il est trop lent ou bien boucle indéfiniment.
      Il n'y a aucune raison pour cela. Ça pourrait arriver si on entre un nombre plus grand que le nombre de produits.
      Dans ce cas, on détruit n'importe quoi et ça peut donner ce résultat.

      -
      Edité par PierrotLeFou 31 mai 2020 à 7:20:40

      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        31 mai 2020 à 16:39:06

        Bonjour,

        Le code je l'ai écrit à la main sur le site France ioi puis je l'ai copié ici pour vous le montrer.

        Merci pour l'aide, l'erreur était bien le compteur que je remettais à 0 en début de boucle.

        Pour ce qui est du #define repeat(nb) ... c'était les boucles que j'utilisais au début car je ne connaissais pas la boucle for, mais maintenant je n'utilise que la for comme boucle.

        Pour les cours que je suis, j'ai juste suivis les cours des exercices sur France ioi.

        Merci, bonne journée.

        • Partager sur Facebook
        • Partager sur Twitter
          2 juin 2020 à 10:59:37

          France ioi ?

          C'est pas plutôt du C qu'ils "enseignent" ?

          Les VLA sont encore autorisées en C mais ne l'on jamais été officiellement en C++.

          std::vector fait largement mieux.

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
          Anonyme
            3 juin 2020 à 18:22:10

            Pourquoi tu ne poses pas ta question sur le forum de france ioi ?

            Il est là pour ça :)

            • Partager sur Facebook
            • Partager sur Twitter

            Etude de marché - Franceioi

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown