Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercice sur France ioi (Structures avancées)

protection du village

Sujet résolu
    10 avril 2019 à 21:01:18

    Bonjour Je suis bloquée sur l'exercice suivant : 

    Le village dans lequel vous avez passé la nuit est en pleine effervescence au matin : encore une attaque de worgs pendant la nuit ! Les worgs sont de redoutables loups qui vivent sur Algoréa et qui s'attaquent au bétail... et parfois même aux enfants.

    C'est décidé, il va falloir construire une grande palissade tout autour du village. Les habitants insistent pour que cette clôture soit rectangulaire et ait une face au Nord, une au Sud, une à l'Est et une à l'Ouest, quitte à devoir travailler un peu plus que nécessaire. Ils ont maintenant besoin de votre aide pour savoir la quantité de bois dont ils vont avoir besoin pour construire cette palissade.

    Ce que doit faire votre programme :

    Le programme doit d'abord lire un entier strictement positif correspondant au nombre de maisons. Ensuite, pour chaque maison, il doit lire la position horizontale (l'abscisse, le "x") et sa position verticale (l'ordonnée, le "y") de cette maison. Toutes les abscisses et ordonnées sont des entiers compris entre zéro et 1 million.

    Le programme doit alors afficher le périmètre de la plus petite clôture rectangulaire englobant toutes les maisons. Ce rectangle doit avoir ses côtés parallèles aux axes du repère, comme montré sur l'illustration.

    Représentation du premier exemple
    Représentation graphique du premier exemple

    Exemple

    entrée :

    4
    1
    5
    5
    3
    4
    6
    2
    9

    sortie :

    20
    voici mon code : 
    nbMaisons = int(input())
    xmax = 0
    ymax = 0
    xmin = 1000000
    ymin = 1000000


    for loop in range(nbMaisons):
        x = int(input())
        y = int(input())

        if x > xmax: 
           xmax = x
        else: 
            xmin = x
        if y > ymax:
            ymax = y
        else:
            ymin = y
    largeur = ymax - ymin
    hauteur = xmax - xmin
    print(largeur*2 + hauteur*2)

    pouvez vous m'expliquer quelles sont mes erreurs ?
    par avance merci
    • Partager sur Facebook
    • Partager sur Twitter
      10 avril 2019 à 22:38:04

      tu prend tout les chiffres qui ne sont pas les plus grand comme plus petit au lieu de prendre véritablement que les plus petits

      for loop in range(nbMaisons):
          x = int(input())
          y = int(input())

          if x > xmax: 
             xmax = x
          elif x < xmin: 
              xmin = x
          if y > ymax:
              ymax = y
          elif y < ymin:
              ymin = y

      je te propose une autre version plus courte

      for loop in range(nbMaisons):
          x = int(input())
          y = int(input())

          xmax = max(x, xmax)
          xmin = min(x, xmin)
          ymax = max(y, ymax)
          ymin = min(y, ymin)
      • Partager sur Facebook
      • Partager sur Twitter
        11 avril 2019 à 9:05:35

        merci pour ce retour, par contre je n'ai pas encore appris les notions min et max d'ou mon code un peu long ci dessus

        pourquoi elif plutot que else ?

        • Partager sur Facebook
        • Partager sur Twitter
          11 avril 2019 à 9:28:47

          elif permet de faire une action sous une autre condition tandis que else le fait quoi qu'il arrive, exemple avec tes 4 permiere entrée:

          4 > max = 4, min = 10**6

          1 > max = 4, min = 1

          5 > max = 5, min = 1

          5 > c'est pas supérieur à 5 donc on laisse 5 mais avec else on met par défaut min à 5 > max = 5, min = 5

          ne pas être supérieur au max != de être inférieur au min

          pour ce qui est de max et min, ce sont des fonctions qui renvoient la plus grande (ou petite) valeur des 2 valeurs qu'on lui apporte

          • Partager sur Facebook
          • Partager sur Twitter
            11 avril 2019 à 10:07:25

            merci c'est plus clair pour moi

            par contre mon code ne passe pas, dans la totalité du test

            nbMaisons = int(input())

            xmax = 1

            ymax = 1

            xmin = 1000000

            ymin = 1000000

            for loop in range(nbMaisons):

               x = int(input())

               y = int(input())

               if x > xmax: 

                  xmax = x

               elif x <= xmin: 

                  xmin = x

               if y > ymax:

                  ymax = y

               elif y <= ymin:

                  ymin = y

            nbMaisons = nbMaisons + 1        

            largeur = ymax - ymin

            hauteur = xmax - xmin

            print(largeur*2 + hauteur*2)

            Test 1 Succès

            Exécuté en 0,05 seconde.

            100 %
            Test 2 Succès

            Exécuté en 0,05 seconde.

            100 %
            Test 3 Échec

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

            -3999950
            

            au lieu de :

            0
            

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

            0 %
            Test 4 Succès

            Exécuté en 0,06 seconde.

            100 %
            Test 5 Succès

            Exécuté en 0,07 seconde.

            100 %
            Test 6 Succès

            Exécuté en 0,06 seconde.

            100 %
            Test 7 Succès

            Exécuté en 0,07 seconde.

            100 %
            Test 8 Succès

            Exécuté en 0,09 seconde.

            100 %
            Test 9 Succès

            Exécuté en 0,1 seconde.

            100 %
            Test 10 Succès

            Exécuté en 0,07 seconde.

            100 %
            Test 11 Succès

            Exécuté en 0,07 seconde.

            100 %
            Test 12 Succès

            Exécuté en 0,07 seconde.

            100 %
            Test 13 Succès

            Exécuté en 0,11 seconde.

            100 %
             
            TOTAL Échec Vous avez réussi 12 tests sur 13.
            ca y est j'ai trouvé la solution, en fait il ne fallait utiliser que des if merci

            -
            Edité par CorinneDallongeville 11 avril 2019 à 10:45:37

            • Partager sur Facebook
            • Partager sur Twitter
              11 avril 2019 à 18:34:58

              Oui parce que sinon quand c'est égal ca pose problème c'est pour ça que min et max je préfère, pas besoins de prendre en compte les différent cas de figures
              • Partager sur Facebook
              • Partager sur Twitter
                19 septembre 2019 à 16:11:21

                je ne comprends pas d'où vient mon erreur :

                nbMaison = int(input())
                xMax = 0
                yMax = 0
                
                
                for i in range(nbMaison):
                    posX =int(input())
                    posY = int(input())
                    if posX <= xMin:
                        xMin =posX
                    elif posX > xMax:
                        xMax = posX
                    if posY > yMax:
                        yMax = posY
                        yMin = posY
                    elif posY <= yMin:
                            yMin = posY
                    
                resultX = xMax - xMin
                resultY = yMax - yMin
                perimetre = (2 * (resultX)) + (2 * (resultY))
                print(perimetre)



                • Partager sur Facebook
                • Partager sur Twitter
                  16 octobre 2019 à 12:19:18

                  TanguyJ1 a écrit:

                  je ne comprends pas d'où vient mon erreur :

                  nbMaison = int(input())
                  xMax = 0
                  yMax = 0
                  
                  
                  for i in range(nbMaison):
                      posX =int(input())
                      posY = int(input())
                      if posX <= xMin:
                          xMin =posX
                      elif posX > xMax:
                          xMax = posX
                      if posY > yMax:
                          yMax = posY
                          yMin = posY
                      elif posY <= yMin:
                              yMin = posY
                      
                  resultX = xMax - xMin
                  resultY = yMax - yMin
                  perimetre = (2 * (resultX)) + (2 * (resultY))
                  print(perimetre)
                  Je ne vois pas de xMin et yMin définis, du coup il a du mal à faire les calculs non ?

                  J'avoue bloquer aussi, j'essaie de décomposer mon code sur papier voir ce que ça donne mais pour l'instant je n'ai pas trouvé l'erreur xD

                  -
                  Edité par HappyBadger 16 octobre 2019 à 12:19:44

                  • Partager sur Facebook
                  • Partager sur Twitter

                  "Ce sont nos choix qui montrent qui nous sommes, bien plus que nos aptitudes"

                  Albus Dumbledore

                  Potterhead forever, proud Hufflepuff

                    16 octobre 2019 à 19:01:47

                    ils sont définit dans la boucle, postez ce que vous avez fait si vous voulez de l'aide
                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 mai 2020 à 16:50:40 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


                        30 août 2020 à 16:21:13 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


                        Exercice sur France ioi (Structures avancées)

                        × 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