Aller au contenu

Socle de statues⚓︎

Sur France-IOI, il y a un exercice Socle de statues.

  1. Faire cet exercice une première fois avec une solution itérative (une boucle).
  2. Refaire cet exercice avec une solution récursive.

Volume d'un socle

Pour un socle, dont la base mesure 7 et le haut mesure 3, le volume doit être de

\(\mathcal V = 7×7×1 + 6×6×1 + 5×5×1 + 4×4×1 + 3×3×1\)

\(\mathcal V = 49 + 36 + 25 + 16 + 9\)

\(\mathcal V = 135\)

On demande une fonction qui renvoie le volume pour un socle dont les deux largeurs extrêmes sont données.

Exercice

Compléter la fonction récursive :

###

def volumepy-undsocle(lpy-undbas, lpy-undhaut):bksl-nl ...bksl-nlbksl-nlbksl-nlassert volumepy-undsocle(7, 3) == 135bksl-nlbksl-nl

Réponse

Un socle est constitué :

  • d'une base de volume l_bas * l_bas * 1
  • et du reste de volume_socle(l_bas - 1, l_haut)
🐍 Script Python
def volume_socle(l_bas, l_haut):
    """Volume d'un socle pour statues"""
    if l_bas < l_haut:
        return 0
    else:
        volume_base = l_bas * l_bas * 1
        return volume_base + volume_socle(l_bas - 1, l_haut)

Un socle est constitué :

  • d'un support de volume l_haut * l_haut * 1
  • et du reste de volume_socle(l_bas, l_haut + 1)
🐍 Script Python
def volume_socle(l_bas, l_haut):
    """Volume d'un socle pour statues"""
    if l_bas < l_haut:
        return 0
    else:
        volume_support = l_haut * l_haut * 1
        return volume_socle(l_bas, l_haut + 1) + volume_support

Sur France-IOI

On pourra compléter ce code.

🐍 Script Python
def volume_socle(l_bas, l_haut):
    ...


assert volume_socle(7, 3) == 135

l_bas = int(input())
l_haut = int(input())
print(volume_socle(l_bas, l_haut))