Notifiche
Cancella tutti

[Risolto] Problema di matematica

  

0

Alice e Bob si sono accorti che nel libro che hanno appena stampato c'è un intervallo di pagine in cui la stampante non ha stampato il numero di pagina. Non vogliono ristampare tutto (scelta ecologica), e decidono di scrivere a mano il numero di pagina nelle pagine mancanti. Ovviamente il lavoro va diviso a metà, Alice inizia dalla prima pagina e Bob dall'ultima, ma scrivere il numero p.es. sulla pagina 1234 è più faticoso di scrivere il numero p.es. sulla pagina 45, quindi ipotizzando che ci mettano lo stesso tempo a scrivere una cifra, determinare a quale pagina si incontreranno (non scrivono il numero dell'ultima pagina a metà, in caso non sia possibile dividere perfettamente a metà, Bob sarà gentiluomo e scriverà al limite lui qualche cifra in più).
Dati N1,N2 (numeri di pagina iniziale e finale dell'intervallo rovinato), determinare il numero dell'ultima pagina che correggerà Alice.

Autore
1 Risposta



1

Dopo 137 parole di chiacchiere inutili che occupano ben 793 battute, finalmente arriva il vero problema "Dati N1,N2 (numeri di pagina iniziale e finale dell'intervallo rovinato), determinare il numero dell'ultima pagina che correggerà Alice.", ma NON ARRIVA l'informazione essenziale per contare il numero di cifre da scrivere: che i numeri di pagina sono ovviamente in base dieci e senza né salti né inserti.
Avrei tanto voluto vedere una foto del libro in cui si leggesse in testa al gruppo di esercizi e in testa alla pagina di quale argomento si tratti: ho il vago sospetto che sia su un testo di Informatica o di Sistemi, cioè che si chieda una soluzione algoritmica e non algebrica.
------------------------------
Il numero L (come lunghezza) di cifre per rappresentare un naturale N con un numerale in base B è
* L(N) = 1 + floor(log(B, N))
dove "floor(x)" è la parte intera inferiore di x, funzione discontinua.
---------------
Quindi il primo calcolo della procedura risolutiva
* tutteLeCifre = T(N1, N2) = Σ [k = N1, N2] (1 + floor(log(10, k))) =
= N2 - N1 + 1 + Σ [k = N1, N2] (floor(log(10, k)))
non essendo lecito applicare la proprietà "somma di logaritmi" non si può ridurre a logaritmi di fattoriali; infatti
* floor(3.7) = 3
* floor(5.6) = 5
* floor(3.7 + 5.6) = 9 > 3 + 5
e pertanto l'approccio algoritmico mi sembra obbligatorio.
------------------------------
#
def quanteCifreT(a, b):
T = 0
for k in xrange(a, b + 1): T += len(str(k))
return T
#
>>> quanteCifreT(45, 1234)
3750
#
------------------------------
Per il secondo calcolo della procedura risolutiva si dimezza T(N1, N2)
* m = T(N1, N2) div 2 = 1875
e si cercano ("par tâtonnements") il numero di pagina n tale che
* T(N1, n) <= T(N1, N2) div 2 < T(N1, n + 1)
#
>>> quanteCifreT(45, 666)
1811
#
* (1875 - 1811)/3 = 21.(3)
* 666 + 21 = 687
#
>>> quanteCifreT(45, 687)
1874
>>> quanteCifreT(45, 688)
1877
#
---------------
Quindi il risultato
* T(45, 687) = 1874 <= 1875 < 1877 = T(45, 688)
autorizza la
CONCLUSIONE
«il numero dell'ultima pagina che correggerà Alice» è 687



Risposta




SOS Matematica

4.6
SCARICA