Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème Le juste prix France ioi

Sujet résolu
12 septembre 2019 à 10:04:23

Bonjour,

Je suis bloquée avec ce sujet:

Vous arrivez dans un village le jour du marché, de nombreux marchands vendent la spécialité locale, de délicieuses petites galettes. Elles ont toutes l'air d'être identiques, donc vous décidez d'acheter les moins chères.

Ce que doit faire votre programme :

Votre programme doit lire un entier nbMarchands (non nul) puis les nbMarchands entiers suivants, qui indiquent le prix des galettes chez chaque marchand, de la position 1 à la position nbMarchands. Votre programme devra ensuite afficher la position du plus petit de ces prix. En cas d'égalité entre deux prix, on prendra la position la plus grande. Tous les prix et positions sont positifs et ne dépassent pas 1 million.

Exemple

entrée :

6
12
11
9
11
9
15

sortie :

5

Commentaires

Parmi ces 6 marchands, c'est le 5ème qui vend ses galettes le moins cher, à 9 euros la galette. Il est à égalité avec le 3e marchand, mais on préfère le 5e qui est le plus près du bout de la rue.

Voilà mon programme:

void main()
{
   int nbMarchands=readInt();
   int prixMoinsCher=1000000;
   int position=1;
   repeat(nbMarchands)
   {
      int prixGalette=readInt();
      if(prixGalette<prixMoinsCher)
      {
         prixMoinsCher=prixGalette;
      }
      position=position+1;
   }
   println(position);
}


Mais le programme ne m'indique pas la position du prix le moins cher et je ne sais pas comment y arriver...

Une petite aide?

Merci :)

-
Edité par Trust_28 12 septembre 2019 à 10:04:43

  • Partager sur Facebook
  • Partager sur Twitter
12 septembre 2019 à 16:21:08

Bonjour,

Comme tu le fais avec le prix, il faut aussi enregistrer "positionDuMoinsCher".

  • Partager sur Facebook
  • Partager sur Twitter
12 septembre 2019 à 18:13:15

Je ne vois pas bien comment enregistrer cette position, c'est ça qui me pose problème justement...

De cette manière?

void main()
{
   int nbMarchands=readInt();
   int prixMoinsCher=1000000;
   int positionMoinsCher=1;
   repeat(nbMarchands)
   {
      int prixGalette=readInt();
      if(prixGalette<prixMoinsCher)
      {
         prixMoinsCher=prixGalette;
         positionMoinsCher=nbMarchands;
      }
   }
   println(position);
}



  • Partager sur Facebook
  • Partager sur Twitter
12 septembre 2019 à 18:15:09

Dans l'exemple que tu donne , la position est décalé de 1 comme un array ..

Or dans ton code , tu commence a la postion 1 ..
Ajoute un -1.
  • Partager sur Facebook
  • Partager sur Twitter
12 septembre 2019 à 21:40:03

Où dois-je ajouter -1? :euh:

void main()
{
   int nbMarchands=readInt();
   int prixMoinsCher=1000000;
   int positionMoinsCher=0;
   repeat(nbMarchands)
   {
      int prixGalette=readInt();
      if(prixGalette<prixMoinsCher)
      {
         prixMoinsCher=prixGalette;
         positionMoinsCher=nbMarchands;
      }
   }
   println(positionMoinsCher);
}

Ça ne fonctionne toujours pas...

Et si j'ajoute "-1" à "int positionMoinsCher", ça fonctionne encore moins...

-
Edité par Trust_28 12 septembre 2019 à 21:41:25

  • Partager sur Facebook
  • Partager sur Twitter
13 septembre 2019 à 11:33:56

Indice : Tu dois garder aussi ta variable "position".
  • Partager sur Facebook
  • Partager sur Twitter
13 septembre 2019 à 13:38:43

Bon... Là je comprends plus du tout :(

void main()
{
   int nbMarchands=readInt();
   int prixMoinsCher=1000000;
   int position=1;
   int positionMoinsCher=-1;
   repeat(nbMarchands)
   {
      int prixGalette=readInt();
      if(prixGalette<prixMoinsCher)
      {
         prixMoinsCher=prixGalette;
         positionMoinsCher=nbMarchands;
      }
   }
   println(positionMoinsCher);
}

Il faut que je garde "position" et "positionMoinsCher"?

Mais comment cela va-t-il m'aider à donner la position du marchand? Je ne comprends pas...

-
Edité par Trust_28 13 septembre 2019 à 13:40:42

  • Partager sur Facebook
  • Partager sur Twitter
13 septembre 2019 à 18:48:32

Il y a deux problèmes.

1) Contrairement à ton code de départ, tu n'incrémentes pas "position". Il reste donc à 1.

2) positionMoinsCher = nbMarchands

nbMarchand est fixe. Dans ton premier exemple, il vaut 6. Donc le résultat sera 6 quels que soient les prix.

prixMoinsCher = prixGalette;
positionMoinsCher = ...; // Pas nbMarchands



  • Partager sur Facebook
  • Partager sur Twitter
13 septembre 2019 à 19:52:00

ALORS! Je pense savoir d'où vient mon erreur:

void main()
{
   int nbMarchands=readInt();
   int prixMoinsCher=1000000;
   int position=1;
   int positionMoinsCher=0;
   repeat(nbMarchands)
   {
      int prixGalette=readInt();
      if(prixGalette<prixMoinsCher)
      {
         prixMoinsCher=prixGalette;
         position=position+1;
         positionMoinsCher=position;
      }
   }
   println(positionMoinsCher);
}

Si dans la boucle, les conditions sont réunies pour que la galette devienne le prix de la galette la moins chère, il faudrait également que la position augmente de 1 aussi! Je pense que c'est ça c'est le problème du coup!

Donc il faut que je trouve comment faire de cette position devienne la moins chère.

Pour ce code, voilà la réponse:

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

4

au lieu de :

5

-
Edité par Trust_28 13 septembre 2019 à 19:52:37

  • Partager sur Facebook
  • Partager sur Twitter
13 septembre 2019 à 21:12:16

Tu y est presque. On incrémente la position à chaque itération. Donc l'incrémentatiton doit être hors du if.
  • Partager sur Facebook
  • Partager sur Twitter
13 septembre 2019 à 21:34:45

void main()
{
   int nbMarchands=readInt();
   int prixMoinsCher=1000000;
   int position=1;
   int positionMoinsCher=0;
   repeat(nbMarchands)
   {
      int prixGalette=readInt();
      if(prixGalette<=prixMoinsCher)
      {
         prixMoinsCher=prixGalette;
         positionMoinsCher=position;
      }
    
      position=position+1;  
   }
   println(positionMoinsCher);
}

ET VOILA! Merci beaucoup! De supers conseils, comme toujours! Merci! :D

-
Edité par Trust_28 13 septembre 2019 à 21:35:25

  • Partager sur Facebook
  • Partager sur Twitter