Partage
  • Partager sur Facebook
  • Partager sur Twitter

france IOI Construction d'une pyramide

    28 juin 2020 à 11:38:34

    Les enfants de la classe de maternelle décident de construire une très grande tour à l'aide de petits cubes en bois. Ils savent exactement la forme qu'ils souhaitent pour leur tour, mais ils n'arrivent pas à savoir s'ils auront suffisamment de cubes pour la construire. Ils vous demandent de les aider à calculer le nombre de cubes nécessaires.

    Ce que doit faire votre programme :

    L'objectif est de construire une tour à l'aide de petits cubes en bois, sachant que la forme de cette tour consiste en un ensemble de grands cubes placés les uns au-dessus des autres. La base de la tour est un cube de taille 17×17×17, c'est-à-dire composé de 17×17×17 = 4 913 petits cubes. Sur ce cube est posé un autre cube de taille 15×15×15. Au-dessus de ce dernier se trouve un cube de 13×13×13. La tour continue ainsi jusqu'à atteindre le sommet, qui consiste en un cube de taille 1×1×1.

    Dessin de la tourExemple d'une tour allant de 1×1×1 cubes à 11×11×11 cubes

    Votre programme doit calculer et afficher le nombre total de petits cubes nécessaires pour construire la pyramide. Effectuez les calculs dans le programme en y intégrant une boucle.

    Bonjour à tous j'avoue que je suis bloquer a cette exercice, j'ai fais des recherche sur le net mais je n'arrive pas a comprendre (je ne vais pas copier coller la réponse non plus) du coup si on peut m'aider c'est top:

    J'ai penser a faire une premiere variable et stocker 17**3 et faire pour chaque tour de boucle cette variable fait un pas de deux et devient par exemple 15**3 qui sera stocker dans une variable résultat pour chaque tour de boucle mais chaque tour de boucle se sera le résultat de 17**3 qu'on enlevera 2 et pas le chiffre 17 en particulier, du coup je ne vois pas trop, merci a ceux qui m'aideront.

    J'ai essayer sa aussi : 

    compteur = 0 

    while compteur < 18:

          compteur +=2

          resultat = compteur**3

    print(resultat)

    Merci,

    -
    Edité par GregoryDijoux1 28 juin 2020 à 11:46:13

    • Partager sur Facebook
    • Partager sur Twitter
      28 juin 2020 à 11:49:35

      du parts de 1 jusqu'à 17(ou 17 jusqu'à 1) avec un pas de 2, et tu cumules les résultats.

      -
      Edité par josmiley 28 juin 2020 à 11:49:59

      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        28 juin 2020 à 11:53:38

        Bonjour et merci mais pourquoi ce code ne marche pas du coup : 

        compteur = 0 

        while compteur < 18:

              compteur +=2 // pas de deux

              resultat = compteur**3 // je met la somme dans la variable résultat a chaque pas de deux ?

        print(resultat)

        Du coup je comprend pas

        • Partager sur Facebook
        • Partager sur Twitter
          28 juin 2020 à 12:01:28

          1 - compteur est paire, donc tu fais 0**3, 2**3, 4**3 au lieu de 1**3, 3**3, 5**3

          2 - ta variable resultat ne cumule pas mais donne le dernier résultat.

          • Partager sur Facebook
          • Partager sur Twitter

          Python c'est bon, mangez-en. 

            28 juin 2020 à 12:36:44

            Je ne comprends pas pour celui la : 

            2 - ta variable resultat ne cumule pas mais donne le dernier résultat.


             j'ai essayer sa mais bon sa ne marche pas non plus : 


            for i in range(1,18,2):

               resultat = i**3

            print(resultat)


            • Partager sur Facebook
            • Partager sur Twitter
              28 juin 2020 à 12:44:00

              'for i in range(1,18,2): resultat = i**3' on est d'accord que le résultat final sera 17**3 et non pas 1**3+3**3+5**3 etc ... parce que dans 'resultat = i**3', resultat ne se souvient pas du résultat précédent.

              il faut que tu trouve un moyen pour que 'resultat' soit le résultat de la somme des 'resultat' précedents.

              au 1er tour resultat vaut 1**3

              au deuxième resultat doit valoir 1**3+2**3

              au troisième resultat doit valoir 1**3+3**3+5**3

              etc ...

              -
              Edité par josmiley 28 juin 2020 à 12:45:10

              • Partager sur Facebook
              • Partager sur Twitter

              Python c'est bon, mangez-en. 

                28 juin 2020 à 13:54:23

                J'ai essayer sa mais sa me fait une boucle infinie : 

                compteur = 1 

                cube = 0

                while compteur < 18:

                        if compteur % 2 == 1:

                           cube = cube + compteur**3

                print(cube)

                • Partager sur Facebook
                • Partager sur Twitter
                  28 juin 2020 à 14:05:15

                  C'est bien mais là compteur n'est plus incrémenté. Tu y est presque.

                  Utilise la boucle for au lieu du while.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Python c'est bon, mangez-en. 

                    28 juin 2020 à 14:23:44

                    Mdr!  j'ai réussi enfin ! merci de ton aide: 

                    compteur = 19

                    cube = 1

                    while compteur > 0 :

                            compteur -= 2

                            cube += compteur**3

                    print(cube)

                    -
                    Edité par GregoryDijoux1 28 juin 2020 à 14:25:42

                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 juin 2020 à 14:35:55

                      cube = 1
                      for compteur in range(3,18,2):
                          cube += compteur**3
                      
                      print(cube)

                      -
                      Edité par josmiley 28 juin 2020 à 14:36:21

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Python c'est bon, mangez-en. 

                        28 juin 2020 à 14:45:40

                        Tu peux m'aider pour le challenge suivant ? 

                        C'est l'heure du cours de mathématiques et aujourd'hui les enfants vont travailler la multiplication. Malheureusement, l'institutrice ne retrouve que la petite table de multiplication, qui va jusqu'à 5 fois 5, mais pas la grande table, qui va jusqu'à 20 fois 20. Elle souhaiterait que vous lui imprimiez une nouvelle table allant jusqu'à 20 fois 20, pour qu'elle puisse l'afficher au mur.

                        Ce que doit faire votre programme :

                        Voici à quoi ressemble la table de multiplication allant jusqu'à 5 fois 5.

                        1 2 3 4 5
                        2 4 6 8 10
                        3 6 9 12 15
                        4 8 12 16 20
                        5 10 15 20 25
                        

                        Écrivez un programme qui affiche une table de multiplication allant jusqu'à 20 fois 20.

                        J'ai écris sa : 

                        ligne_1 = 0

                        ligne_col = 0


                        for i in range(20):

                           ligne_1 += 1

                           print(ligne_1, end=" ")

                           for j in range(20):

                              ligne_col += 1

                              print(ligne_col, end = " ")


                        sa ne donne pas le bon résultat ><

                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 juin 2020 à 14:57:32

                          Tu brûles les étapes. Commence déjà par afficher la table de 1 sans t'occuper de la mise en forme de l'affichage.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Python c'est bon, mangez-en. 

                            28 juin 2020 à 15:16:23

                            La limite dans un range est la valeur maximum "+ 1"
                            for i in range(1, 21):
                                for j in range(1, 21):
                                    print(i*j, end=' ')
                                print()
                            • Partager sur Facebook
                            • Partager sur Twitter

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

                              28 juin 2020 à 15:16:52

                              D'accord je vois, sa marche mais j'avoue que j'ai un peux de mal a comprendre ^^

                              for i in range(20): ligne_1 += 1 print(ligne_1, end=" ") for j in range(20): ligne_col += 1 print(ligne_col, end = "\n")

                              Pourquoi celui la ne marche pas par exemple ?

                              -
                              Edité par GregoryDijoux1 28 juin 2020 à 15:19:38

                              • Partager sur Facebook
                              • Partager sur Twitter
                                28 juin 2020 à 15:42:11

                                Parce qu'une table de multiplication ça multiplie, et que dans ton code il n'y a aucune multiplication, ça compte linéairement, mais c'est déjà une bonne base. Reste à ajouter la multiplication.
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Python c'est bon, mangez-en. 

                                  28 juin 2020 à 19:22:46

                                  Du code à la josmiley:
                                  print("\n".join([" ".join([str(i*j) for j in range(1,21)]) for i in range(1,21)]))
                                  • Partager sur Facebook
                                  • Partager sur Twitter

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

                                    28 juin 2020 à 20:03:04

                                    PierrotLeFou a écrit:

                                    Du code à la josmiley:
                                    print("\n".join([" ".join([str(i*j) for j in range(1,21)]) for i in range(1,21)]))


                                    non pas trop ...

                                    déjà le premier exo:

                                    foo = lambda x: x-1 and (x**3 + foo(x-2)) or 1
                                    print(foo(17))
                                    


                                    après faut que je réfléchisse ^^

                                    tiens, pour une fois je vais faire simple:

                                    for i in range(1,21):print(*range(i,i*21,i))

                                    nananère ...

                                    -
                                    Edité par josmiley 28 juin 2020 à 20:24:04

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Python c'est bon, mangez-en. 

                                      29 juin 2020 à 1:14:11

                                      Pour ajouter l'insulte à l'injure ... je récidive ...
                                      foo=lambda x, y: " "*(3-len(str(x*y)))+str(x*y)   # pas très efficace ...
                                      print("\n".join([" ".join([foo(i,j) for j in range(1,21)]) for i in range(1,21)]))
                                      # ... mais c'est plus joli quand c'est aligné ...
                                      #print(' '.join(str([[i*j for j in range(1,21)] for i in range(1,21)])))
                                      • Partager sur Facebook
                                      • Partager sur Twitter

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

                                        29 juin 2020 à 6:20:45

                                        Bonjour, mdr! merci a tous je suis façe a un nouveaux problème , je crois que le topic va faire 60 page lol : 

                                        Au village, la passion pour le calcul mental est une tradition : des jeux centrés sur cette pratique sont régulièrement organisés par les habitants. Pour chaque jeu, ils décident d'abord combien de nombres devront être prononcés ; puis chaque joueur doit effectuer un calcul déterminé par les règles du jeu. Chaque fois que quelqu'un se trompe et qu'un autre joueur s'en rend compte, le joueur qui s'est trompé doit se corriger, et il devra un Gombo (une friandise du coin) à celui qui lui a signalé son erreur le plus rapidement.

                                        Vous aimeriez participer, mais les habitants vont si vite et manipulent des nombres si grands que vous êtes tout de suite dépassé par les calculs ! Alors qu'un nouveau jeu se prépare, vous décidez finalement d'utiliser votre robot pour vous aider à rivaliser.

                                        Ce que doit faire votre programme :

                                        Un nombre de départ va être donné par le chef du village. La personne qui suit doit le multiplier par 2, puis la suivante doit multiplier le nombre obtenu par 3, celle d'encore après doit multiplier le résultat par 4… jusqu'à ce que les <var style="hyphens: none;">nbNombres</var> calculs aient été effectués.

                                        Le chef a choisi le nombre 66 pour démarrer le jeu. Votre programme lira l'entier <var style="hyphens: none;">nbNombres</var>, la quantité de nombres attendue par le jeu (nombre de départ inclus). Il devra ensuite afficher tous les nombres de la partie afin de vous rendre imbattable !

                                        EXAMPLEs

                                        EXAMPLE 1

                                        input:

                                        4

                                        output:

                                        66
                                        132
                                        396
                                        1584

                                        EXAMPLE 2

                                        input:

                                        1

                                        output:

                                        66

                                        COMMENTS

                                        Les valeurs du premier exemple correspondent aux calculs suivants :

                                        • 66
                                        • 66 × 2 = 132
                                        • 132 × 3 = 396
                                        • 396 × 4 = 1584

                                        j'ai écrit ce code : 

                                        nb_depart = 66

                                        nb_nombre = int(input())

                                        for i in range(0,nb_nombre,1):

                                           nb_depart *= nb_nombre

                                           print(nb_depart)


                                        malheureusement il ne passe que le premier test et au test 2 il m'affiche sa : 


                                        Your program gave a wrong answer.
                                        It outputed:

                                        132
                                        264
                                        

                                        instead of:

                                        66
                                        132
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          29 juin 2020 à 7:54:47

                                          Tu écris:
                                          for i in range(0,nb_nombre,1):
                                          Tu semble avoir de la difficulté avec les range(). Je t'invite à revoir la doc.
                                          https://pynative.com/python-range-function/
                                          le 0 au début et le 1 à la fin ne sont pas nécessaires
                                          On s'arrête à la valeur du milieu - 1 (si c'est le deuxième nombre)
                                          Il faut écrire:
                                          for i in range(1, nb_nombre+1):
                                          La ligne:
                                             nb_depart *= nb_nombre
                                          est en erreur, je te laisse chercher un peu. Fais le calcul sur papier pour voir.

                                          -
                                          Edité par PierrotLeFou 29 juin 2020 à 8:01:46

                                          • Partager sur Facebook
                                          • Partager sur Twitter

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

                                            29 juin 2020 à 8:07:55

                                            J'ai essayer d'une autre façon je passe le test 2 mais sa ne veut pas passer le test 3 : 

                                            nb_depart = 66

                                            nb_nombre = int(input())

                                            for i in range(nb_nombre):

                                               i += 1

                                               nb_final = nb_depart * i

                                               print(nb_final)

                                            pour i = 1 :

                                               on fait i + 1 

                                                on ajoute dans nb _final 66 x 1

                                            pour i = 2 

                                                on ajoute dans nb final 66x2

                                            pour i = 3

                                               on ajoute 66x3 dans nb final erreur parce que on doit additionner le résultat de i = 2 par 3 et non 66

                                            Je n'ai pas compris pourquoi ajouter +1 a nbNombre dans la boucle for ?

                                            -
                                            Edité par GregoryDijoux1 29 juin 2020 à 8:13:37

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              29 juin 2020 à 8:27:32

                                              Ce n'est pas dans la boucle, c'est à l'intérieur du range.
                                              et tu n'as pas à incrémenter i dans la boucle, c'est le range qui le fait pour toi, tu dois écrire:
                                                  nombreDepart*=i

                                              -
                                              Edité par PierrotLeFou 29 juin 2020 à 8:31:12

                                              • Partager sur Facebook
                                              • Partager sur Twitter

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

                                                29 juin 2020 à 8:37:27

                                                sa a marcher avec noombreDepart *= i mais j'avoue que j'ai un peux de mal a comprendre pourquoi la sa marche et pas dans l'autre cas
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  29 juin 2020 à 9:11:46

                                                  PierrotLeFou a écrit:

                                                  Pour ajouter l'insulte à l'injure ... je récidive ...
                                                  foo=lambda x, y: " "*(3-len(str(x*y)))+str(x*y)   # pas très efficace ...
                                                  print("\n".join([" ".join([foo(i,j) for j in range(1,21)]) for i in range(1,21)]))
                                                  # ... mais c'est plus joli quand c'est aligné ...
                                                  #print(' '.join(str([[i*j for j in range(1,21)] for i in range(1,21)])))


                                                  Quel effronté ! je m'insurge ... lol.

                                                  j'aligne aussi:

                                                  for i in range(1,21):print(('{:>4}'*20).format(*range(i,i*21,i)))



                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  Python c'est bon, mangez-en. 

                                                    29 juin 2020 à 14:59:50

                                                    GregoryDijoux1 a écrit:

                                                    sa a marcher avec noombreDepart *= i mais j'avoue que j'ai un peux de mal a comprendre pourquoi la sa marche et pas dans l'autre cas

                                                    Comme je l'ai dit, tu sembles avoir de la difficulté à comprendre soit le for, soit le range.

                                                    for i in range(1, nb_nombre+1):

                                                        nombreDepart *= i

                                                    Ça veut dire pour toutes les valeurs de i entre 1 et nb_nombre (nb_nombre+1-1) faire la boucle

                                                    Dans la boucle, je multiplie la valeur courante de nombreDepart par la valeur courante de i

                                                    66*1=66

                                                    66*2=132

                                                    132*3=396

                                                    etc.

                                                    -
                                                    Edité par PierrotLeFou 29 juin 2020 à 15:07:59

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

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

                                                      30 juin 2020 à 9:29:06

                                                      Bonjour ah merci je comprend mieux j'ai un petit problème avec cette exo maintenant : 

                                                      Les habitants d'Algoréa aiment bien ériger des statues et les poser sur des socles majestueux. Selon les dimensions de la statue, le socle doit être plus ou moins haut et offrir une surface plus ou moins grande pour y poser la statue. Cependant, les constructeurs de statues ont souvent du mal à estimer la quantité de béton nécessaire à la construction de chaque socle. Vous souhaitez écrire un programme pour les aider.

                                                      Ce que doit faire votre programme :

                                                      Voici un exemple de socle :

                                                      Pyramide formée de 3 marches carrées de tailles décroissantes

                                                      Un socle est ainsi constitué d'étages, chaque étage ayant une hauteur égale à une unité et une base carrée. Le côté des carrés diminue de une unité à chaque étage.

                                                      Votre programme doit lire deux entiers, représentant respectivement la largeur du socle au niveau du sol et la largeur du socle au niveau de la face supérieure du socle. Il doit ensuite calculer et afficher le volume du socle.

                                                      EXAMPLE

                                                      input:

                                                      7
                                                      3
                                                      

                                                      output:

                                                      135

                                                      COMMENTS

                                                      Le volume du premier étage est 7 × 7 = 49, le volume du second est 6 × 6 = 36, etc. et le volume du dernier étage est 3 × 3 = 9. Le volume total est donc : 7 × 7 + 6 × 6 + 5 × 5 + 4 × 4 + 3 × 3 = 135.

                                                      voici le code (j'en ai essayer plusieur aussi avec une boucle for mais pas de résultat) : 

                                                      largeurSocle = int(input())

                                                      largeurSocleFaceSup = int(input())

                                                      total = 7

                                                      while total >= largeurSocleFaceSup:

                                                         largeurSocle *= total

                                                      print(largeurSocle)


                                                      largeurSocle = int(input())
                                                      largeurSocleFaceSup = int(input())
                                                      for in range(largeurSocleFaceSup):
                                                      largeurSocle *= largeurSocleFaceSup
                                                      print(largeurSocle)

                                                      -
                                                      Edité par GregoryDijoux1 30 juin 2020 à 10:00:24

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        30 juin 2020 à 11:20:47

                                                        d'où sort total = 7 ?

                                                        ta boucle for doit boucler entre largeurSocle et largeurSocleFaceSup

                                                        ta boucle doit additionner les surfaces à chaque fois donc volume += (largeur*largeur) #en supposant que largeur est ta variable de boucle

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          30 juin 2020 à 12:32:47

                                                          J'ai essayer sa mais sa ne marche pas :

                                                          largeurSocle = int(input())

                                                          largeurSocleFaceSup = int(input())

                                                          volume = 0

                                                          soustractionDesSocle = largeurSocle - largeurSocleFaceSup

                                                          for i in range(soustractionDesSocle):

                                                             volume = volume + (largeurSocle * largeurSocle)

                                                          print(volume) 

                                                          largeurSocle = int(input())
                                                          largeurSocleFaceSup = int(input())
                                                          volume = 0
                                                          for in range(largeurSocle):
                                                          volume = volume + (largeurSocle * largeurSocle)
                                                          print(volume)

                                                          -
                                                          Edité par GregoryDijoux1 30 juin 2020 à 13:05:54

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            30 juin 2020 à 15:02:01

                                                            bah oui normal, tu utilises toujours la même valeur pour valeurSocle

                                                            Tu sembles encore avoir des problèmes avec range()  et la boucle for
                                                            Pour range() regarde là => https://www.w3schools.com/python/ref_func_range.asp et pour for (et range aussi) par ici https://www.w3schools.com/python/python_for_loops.asp
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              30 juin 2020 à 15:06:42

                                                              Tu n'as toujours pas d'intervalle dans ton for.
                                                              Tu dois utiliser la variable du for ('i')
                                                              Utilise une variable pour cumuler les volumes de chaque étage.
                                                              @umfred: nos messages se sont chevauchés.

                                                              -
                                                              Edité par PierrotLeFou 30 juin 2020 à 15:09:22

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

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

                                                              france IOI Construction d'une pyramide

                                                              × 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