Besoin d'aide

Variables et boucles

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour Je viens de m'inscrire sur "IOI" (site trouvé dans la banque de liens sur ce forum) afin d'apprendre le language JAVA.

Je recontre des difficultés avec cet exercise: (http://www.france-ioi.org/forum/thread.php?idThread=6691)

<Sujet: C'est la dernière semaine de cours et l'école organise une grande kermesse. L'un des stands, "La Foire aux bonbons", propose un jeu permettant de gagner des bonbons. Le jeu est simple : il faut atteindre le plus grand nombre de fois possible une cible sans jamais la rater. On peut gagner gros, car plus on touche la cible, et plus on gagne de bonbons à chaque fois qu'on touche la cible ! Les élèves aimeraient connaître le nombre de bonbons qu'ils peuvent gagner en fonction du nombre de tirs consécutifs réussis.

Ce que doit faire votre programme :

Toucher la cible au premier tir rapporte un bonbon, toucher la cible au deuxième tir rapporte deux bonbons de plus, la toucher au troisième tir rapporte encore trois bonbons de plus, etc… Écrivez un programme qui affiche sur la première ligne le nombre total de bonbons obtenus si l'on ne réussit que 1 tir, puis qui affiche sur la deuxième ligne le nombre de bonbons récupérés si l'on réussit 2 tirs de suite, puis sur la troisième ligne le nombre de bonbons récupérés si l'on réussit 3 tirs de suite, etc… jusqu'à la valeur que l'on peut récupérer si l'on réussit 50 tirs de suite. Par exemple, si votre programme s'arrêtait à 5 et non à 50, il devrait afficher ceci : ↳ 1 3 6 10 15>

J'ai tenté de créer une liste de chiffres 0-50 afin d'essayer par divers moyens d'additionner les precedents chiffres à "l'actuel" chiffre a l'aide d'une boucle. J'echoue à chaque fois.

Un indice svp? Merci d'avance :)

Édité par dan233

+0 -0

Salut,

Tu ne dois pas créer une liste de chiffres et refaire l'addition à chaque fois. Tu dois juste stocker le total déjà atteint dans une variable et rajouter à chaque tour le nombres de bonbons qu'il faut. Comme ceci :

1
2
3
4
5
6
7
total = 0

1 -> total = 1
2 -> total = total + 2 = 3
3 -> total = total + 3 = 6
...
n -> total = total + n = n (n + 1) / 2

Pour 50 tirs, tu auras 1275 bonbons. De quoi avoir beaucoup de caries, il faut empêcher les enfants de jouer :)

Édité par Karnaj

Je fais un carnage si ce car nage car je nage, moi, Karnaj ! - Tutoriels LaTeX - Contribuez à un tutoriel Ruby

+0 -0
Auteur du sujet

Merci pour ta reponse :)

Le probleme c est que je ne sais pas comment presenter les 50 tirs dans ce code. Je pourrais bien sur faire figurer tout les tirs de 1 à 50 (l'un apres l'autre genre 1, 2, 3, comme dans ton exemple) mais ce n'est bien sur pas le but de l'exercise. Comment automatiser ca?.. Si je comprend bien il ne faut pas que je me base sur la boucle suivante?:

1
2
3
4
5
6
                      int n = 1;
          for (int loop = 1; loop <=50; loop = loop + 1)
          {
          System.out.println(n);
              n = n + 1;
          }

Édité par dan233

+0 -0

Si j'ai bien compris le but le l'exercice alors ta boucle est bonne. Le problème est que tu ne rajoutes pas à n la bonne valeur. Tu dois ajouter à n le nombre de tir déjà réussi sont le tour de boucle auquel tu es. Donc en pseudo-code :

1
2
3
4
5
6
nbBonbons = 0
pour k allant de 1 à 50 faire
   nbBonbons = nbBonbons + k
   afficher(nbBonbons)
   aller_a_la_ligne()
fin pour

Ou comme tu l'as fait en initialisant nbBonbons à 1 et en faisant l'ajout après l'affichage. Mais dans ce cas, ta boucle commencera à 2.

PS : désolé pour l'ortographe, je suis sur téléphone.

Édité par Karnaj

Je fais un carnage si ce car nage car je nage, moi, Karnaj ! - Tutoriels LaTeX - Contribuez à un tutoriel Ruby

+0 -0
Auteur du sujet

Karnaj

Merci

J'ai fait comme ca et ca a fonctionné:

1
2
3
4
5
6
7
      int n = 0;
      for (int loop = 1; loop <=50; loop = loop + 1)
      {
          n = n + 1;
          int k = n*(n + 1)/2;
          System.out.println(k);
      }

Qu'en penses tu?

Édité par dan233

+0 -0

Oui ça marche mais ça n'est par optimisé. En fait, j'ai l'ipression que tu n'as pas encore bien saisi l'utilité des boucles. Tu peux utiliser la variable loop à l'intérieur de ta boucle. Pour obtenir un code de ce genre :

1
2
3
4
5
6
int n = 0;
for(int k = 1; k <= 50; k = k + 1)
{
   n = n + k;
   System.out.println(n)
}

Je fais un carnage si ce car nage car je nage, moi, Karnaj ! - Tutoriels LaTeX - Contribuez à un tutoriel Ruby

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte