Partage
  • Partager sur Facebook
  • Partager sur Twitter

France IOI exercice

17 octobre 2017 à 10:44:30

Bonjour,

Cela fait 2 jours que je suis sur un exercice sur France IOI, et cet exo est entrain de me rendre fou.

Voici le lien de l'exercice: http://www.france-ioi.org/algo/task.php?idChapter=647&iOrder=1

Voici ma solution: 

nb_ville = int(input())
element=0
for loop in range(nb_ville):
   cible=int(input())
   if cible >= 10000:
      somme = 1
      somme= somme + element
print(somme)

J'utilise le forum d'aide du site, mais impossible de comprendre pourquoi cela bloque. J'ai fait plus d'une centaine de soumission et impossible d'avoir un résultat correct.

Merci d'avance

  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2017 à 11:04:52

Deux choses avant de te répondre:

  • Au lieu de mettre un lien, met directement l'énoncé sur le forum
  • Pour insérer du code il faut utiliser le bouton </> et choisir le langage python

Concernant ton erreur, elle se situe en lignes 6 et 7. En ligne 6 tu réinitialises à chaque tour de boucle la valeur de somme (donc forcément elle vaudra toujours 1) et en ligne 7 tu lui ajoutes l'objet element qui vaut ... 0. Donc de toute manière ta somme sera toujours égal à 1.

En fait je ne vois pas l'intérêt d'avoir deux variables (element et somme). Il faut juste un compteur initialisé à 0 à l'extérieur de la boucle et lui ajouter 1 si la condition est remplie:

nb_lieux = int(input("Nombre de lieux: "))

nb_villes = 0
for _ in range(nb_lieux):
   nb_habitants = int(input("Nombre d'habitants: "))
   if nb_habitants > 10000:  #strictement supérieur
      nb_villes += 1

print(nb_villes)
  • Partager sur Facebook
  • Partager sur Twitter
Précepte: Le mieux est l'ennemi du bien
17 octobre 2017 à 11:16:16

ha oui d'accord, je vois maintenant, je ne savais pas qu'on pouvait mettre nb_villes +=1 pour faire l'addition. 

Par contre j'en ai un autre du même type:

Pareil, dans le même genre d'exercice, j'ai fait mon programme mais il faut que mon programme prennent en compte le positif et le négatif:

Ce que doit faire votre programme :

Votre programme doit d'abord lire un entier décrivant votre position actuelle sur la route, sous la forme d'un nombre de kilomètres par rapport au début de la route. Ensuite, il doit lire un entier donnant le nombre de villages. Pour chaque village, il doit lire un entier décrivant la position de ce village le long de cette même route. Votre programme doit alors afficher le nombre de villages qui se trouvent à une distance inférieure ou égale à 50 km de votre position actuelle.

Exemple

entrée :

120
5
30
113
187
145
129

sortie : 3

position = int(input())
nbVillage = int(input())
distance3=0
for loop in range(nbVillage):
   distance= int(input())
   distance2= position - distance
   if distance2 < 50:
      distance3= distance3 + 1
print(distance3)

Je pensais remettre un if distance < 0

distance=-distance

Mais c'est trop compliqué à mon avis?

-
Edité par iksoN 17 octobre 2017 à 11:33:42

  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2017 à 11:47:15

À quoi servent les variables distance2 et distance3? D'ailleurs cette dernière n'est même pas utilisé dans ton code.

L'objectif est simplement de compter le nombre de village se trouvant dans un cercle de 50 km autour de ta position. Donc où se trouve ce compteur?

Dans cet exercice, il faut utiliser la fonction abs qui permet d'obtenir la valeur absolue d'une expression (donc d'avoir toujours une valeur positive à manipuler):

abs(120 - 113)  #-> 7
abs(120 - 187)  #-> 67:  valeur positive
  • Partager sur Facebook
  • Partager sur Twitter
Précepte: Le mieux est l'ennemi du bien
17 octobre 2017 à 11:54:23

le distance 3 me permet de faire l'addition à chaque fois, et le distance 2 à calculer la distance entre ma position et un autre village. Par contre pour la valeur absolue, il faut donc mettre abs(distance2)= position -distance
  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2017 à 12:06:24

CharlesAngelini a écrit:

le distance 3 me permet de faire l'addition à chaque fois


Oui, j'ai écrit mon message pendant que tu modifiais le tien. Donc effectivement maintenant distance3 sert à quelque chose. Mais pourquoi ne pas lui donner un nom de variable explicite? Idem pour distance2? D'ailleurs pas besoin de passer par une variable intermédiaire à chaque fois (ça évite de devoir trouver des noms à chaque variable :p), tu peux directement faire la différence et la comparaison en une seule étape:

if abs(moi - distance_village) <= 50:
      villages_alentour += 1


Et attention à bien lire l'énoncé. Ici c'est:

CharlesAngelini a écrit:

le nombre de villages qui se trouvent à une distance inférieure ou égale à 50 km de votre position actuelle.



-
Edité par Olygrim 17 octobre 2017 à 12:07:07

  • Partager sur Facebook
  • Partager sur Twitter
Précepte: Le mieux est l'ennemi du bien
17 octobre 2017 à 12:16:32

ha merci, je ne savais pas qu'on pouvais faire le calcul directement dans le if. Je débute dans la programmation, on en apprend tous les jours, c'est super intéressant ;)
  • Partager sur Facebook
  • Partager sur Twitter
4 novembre 2018 à 18:07:00

bonjour à tous, 

j'ai lu et relu votre correction mais je ne comprends toujours pas comment faire... ni dans quel ordre. pourriez - vous me dire ?

merci d'avance

-
Edité par lolo2801 4 novembre 2018 à 18:09:32

  • Partager sur Facebook
  • Partager sur Twitter
12 décembre 2018 à 14:46:45

Salut tout le monde voilà la version finale du code:

position = int(input())
nbVillage = int(input())
villages_alentour=0

for loop in range(nbVillage):
   a = int(input())
   if abs(position - a) <= 50:
      villages_alentour += 1
print(villages_alentour)



  • Partager sur Facebook
  • Partager sur Twitter
18 septembre 2019 à 13:50:31 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code