Si suppone di aver acquisito dal file di input i dati e di aver memorizzato:
- il resto nella variabile Resto
- i tagli delle singole monete nell'array Taglio
Cioè
Resto = 6
Taglio[0] = 1
Taglio[1] = 2
Taglio[2] = 5
Taglio[3] = 10
Taglio[4] = 20
Taglio[5] = 50
Per tentare di individuare il procedimento risolutivo, si osservino i modi in cui si può formare il resto 6:
- 6 monete da un centesimo,
- 4 monete da un centesimo e 1 da due centesimi,
- 2 monete da un centesimo e 2 da due centesimi,
- 1 moneta da un centesimo e 1 da cinque centesimi,
- 3 monete da due centesimi.
Per pervenire al primo risultato (6 monete da 1 centesimo):
Contare il numero di monete del Taglio[0] che si avvicinano per difetto, o formano esattamente l'importo Resto
Per ottenere tale conteggio:
dividere il Resto per il valore della moneta del Taglio[0]
|
a) NrMon0 = Resto / Taglio[0]
|
Nel caso specifico, essendo il valore del taglio minimo pari a 1 centesimo, il risultato fornisce il numero esatto di monete che formano l'importo.
Lo stesso Resto, però si ottiene con un numero minore di monete da 1 centesimo sommato ad altre monete di taglio superiore.
(si vedano la seconda, la terza e la quarta combinazione).
Quindi il valore della variabile
NrMon0 calcolato è il massimo numero che consente di uguagliare o avvicinare per difetto il
Resto,
si devono valutare anche le possibilità di ottenere lo stesso resto con valori inferiori di
NrMon0, quindi si calcoli l'importo:
|
b) Somma0 = NrMon0·Taglio[0]
|
Poi si deve confrontare l'importo
Somma0, formato da tale numero di monete, con il
Resto:
|
Se Somma0 è uguale al Resto
|
Se il confronto dà esito vero si è trovata una combinazione e si devono provare
altre combinazioni usando un numero inferiore di monete:
Allora:
contare una combinazione,
decrementare di uno il valore di NrMon0,
ripetere dal punto b)
|
In caso contrario sicuramente la somma formata è inferiore al resto, bisogna perciò calcolare, usando una seconda variabile
Somma1, quanto manca:
Altrimenti:
Somma1 = Resto - Somma0
|
Anche in questo caso bisogna valutare quante monete del
taglio[1] occorrono per formare l'importo che manca:
|
c) NrMon1 = Somma1 / Taglio[1]
|
Il procedimento si ripete perchè anche in questo caso si deve valutare se con un numero inferiore di monete del
taglio[1] sommate a monete del
Taglio[2] consentono di formare l'importo mancante:
Se NrMon1·Taglio[1] + Somma0 uguaglia il Resto
Allora:
contare una combinazione,
decrementare il valore NrMon1,
ripetere dal punto c)
Altrimenti:
calcolare quanto manca
. . .
ecc.
|
Osservando la successione di operazioni ci si rende conto che i due rami (
Allora ... Altrimenti) che seguono il confronto (
Se) tra la somma ed il resto
sono costituiti dalle stesse operazioni su variabili che, pur essendo diverse, hanno lo stesso significato:
ci sono le variabili
NrMon0 e
NrMon1, le variabili
Somma0 e
Somma1, continuando ci si
accorgerà che serviranno le variabili
NrMon2,
NrMon3, ...
Somma2,
Somma3 ...