Matematica Senza Frontiere – 10/02/2015
Annamaria si diverte con le successioni numeriche.
Sceglie un numero intero naturale come primo numero della successione; calcola il successivo moltiplicando tra loro le cifre del numero.
Procede analogamente con il numero ottenuto finché non ottiene un numero con una sola cifra.
Ad esempio, iniziando da 68, ottiene la successione di quattro numeri 68, 48, 32, 6.
Quale numero intero naturale inferiore a 100 comporta, seguendo il procedimento descritto, la successione più lunga?
Soluzione 1
Scrivi un programma che visualizza tutte le sequenze per i numeri minori di 100 e decidi guardando l’output
for n in range(100):
print(n, "-->", sep="\t", end="\t")
while(n >= 10):
nd = n // 10
nu = n % 10
n = nd * nu
print(n, end="\t")
print()
0 -->
...
70 --> 0
71 --> 7
72 --> 14 4
73 --> 21 2
74 --> 28 16 6
75 --> 35 15 5
76 --> 42 8
77 --> 49 36 18 8
78 --> 56 30 0
79 --> 63 18 8
80 --> 0
...
99 --> 81 8
Soluzione 2
Scrivi un programma che decide qual è la sequenza più lunga
lungMax = 0
enneMax = 0
#--------------------------------------
for n in range(100):
N = n
L = 0
#----------------------------------
print(N, "-->", sep="\t", end="\t")
while(N >= 10):
L += 1
nd = N // 10
nu = N % 10
N = nd * nu
print(N, end="\t")
print()
#----------------------------------
if(L > lungMax):
lungMax = L
enneMax = n
#--------------------------------------
print()
print(enneMax, ">>", lungMax)
0 -->
...
70 --> 0
71 --> 7
72 --> 14 4
73 --> 21 2
74 --> 28 16 6
75 --> 35 15 5
76 --> 42 8
77 --> 49 36 18 8
78 --> 56 30 0
79 --> 63 18 8
80 --> 0
...
99 --> 81 8
77 >> 4
Il modo più semplice per disegnare un grafico a barre verticali
from vpython import *
graph(fast=False)
g = gvbars()
for n in range(100):
N = n
L = 0
while(N >= 10):
L += +1
nd = N // 10
nu = N % 10
N = nd * nu
g.plot(n, L)


import matplotlib.pyplot as plt
def lunghezza(N):
L = 0
while(N >= 10):
L += 1
nd = N // 10
nu = N % 10
N = nd * nu
return L
NUMERI = range(100)
LUNGHEZZE = 100*[0]
for n in NUMERI:
LUNGHEZZE[n] = lunghezza(n)
plt.bar(NUMERI, LUNGHEZZE)
plt.grid()
plt.show()