Python en mathématiques - Défis

Rallye 2017 - Exercice 11

Sommes sur segments

Énoncé original

énoncé

Question

Proposez un programme Python résolvant l'exercice.

  • Un code possible
  • Un code amélioré

On nomme d1 le nombre en haut à gauche, d2 le nombre en haut à droite, d3 le nombre au centre, d4 le nombre en bas à gauche et d5 le nombre en bas à droite.

Un entier naturel di participant à une somme de valeur s aura pour valeur maximale s. D'où les bornes choisies pour les boucles.


for d1 in range(0,24) :
    for d2 in range(0, 28):
        for d3 in range(0,24):
            for d4 in range(0,36):
                for d5 in range(0,30):
                    if d1+d2 == 30 and d1+d4 == 36 and d1+d3 == 24 :
                        if d2+d3 == 28 and d2+d5 == 36 :
                            if d3+d4 == 34 and d3+d5 == 30 :
                                if d4+d5 == 42 :
                                    print("d1 = ", d1)
                                    print("d2 = ", d2)
                                    print("d3 = ", d3)
                                    print("d4 = ", d4)
                                    print("d5 = ", d5)
	

On obtient :

d1 =  13
d2 =  17
d3 =  11
d4 =  23
d5 =  19

On pourra, entre autres, comparer et expliquer les vitesses d'exécution des deux codes.


for d1 in range(0,24) :
    d2 = 30-d1
    d3 = 24-d1 
    if d2 + d3 == 28 :
        d4 = 36 - d1
        if  d3 + d4 == 34 :
            d5 = 36 - d2
            if d3+d5 == 30 and d4+d5 == 42 :
                print("d1 = ", d1)
                print("d2 = ", d2)
                print("d3 = ", d3)
                print("d4 = ", d4)
                print("d5 = ", d5)