Un esercizio introduttivo molto semplice, per comprendere alcuni meccanismi del java lato console. Si tratta di restituire un ipotetico resto di 100€ contando un numero più possibile piccolo di banconote e tagli di monete.
Ipotizziamo di andare a fare la spesa e pagare con una banconota da 100€. Il cassiere ci dovrà restituire il resto ma dovrà scegliere con cura le banconote o monete per restituire meno pezzi possibile. Ad esempio spendiamo 60€ (dato in input) e il cassiere, che ha a disposizione banconote (infinite gulp) da 50€, 20€, 10€, 5€, 2€ e 1€, ci deve restituire il resto con meno banconote possibile e quindi sceglierà di darci due pezzi da 20. Altro esempio, spendiamo 47€, il cassiere ci deve restituire 53€ e quindi ci darà una banconota da 50€, una moneta da 2€ e una da 1€ . Dobbiamo quindi scrivere il programma che stampa a video il suggerimento per il cassiere delle monete da dare. Creiamo una progetto, con una classe qualsiasi e predisponiamo il metodo static main.
Vediamo due versioni. Una prima versione fa un uso semplificato di codice e variabili in abbondanza per risolvere il problema. Per ogni taglio di moneta mi predispongo una variabile e procedo a far una divisione intera per capire quante banconote posso usare di quel taglio, poi calcolo il resto che sarà la soma decurtata dalle banconote usate. Tale resto dovrà poi ricevere analogo trattamento dai tagli più piccoli successivi.
int spesa = 66;
int resto = 100 - 66;
System.out.println("Il resto è " + resto);
int monete50 = resto / 50;
resto = resto % 50;
System.out.println("Monete da 50: " + monete50);
int monete20 = resto / 20;
resto = resto % 20;
System.out.println("Monete da 20: " + monete20);
int monete10 = resto / 10;
resto = resto % 10;
System.out.println("Monete da 10: " + monete10);
int monete5 = resto / 5;
resto = resto % 5;
System.out.println("Monete da 5: " + monete5);
int monete2 = resto / 2;
resto = resto % 2;
System.out.println("Monete da 2: " + monete2);
int monete1 = resto / 1;
resto = resto % 1;
System.out.println("Monete da 1: " + monete1);
Vediamo la stessa soluzione ma con un metodo più smart con un ciclo, su un opportuno array dove inseriamo i tagli di monete. Ho utilizzato un ciclo particolare molto utile per scorrere i vettori di elementi con una sintassi abbreviata e concisa e un accesso al vettore senza usare la trafile monete[k]. In questo caso, invece di avere una variabile per ogni quantità ne uso solo una.
int spesa = 66;
int resto = 100 - 66;
System.out.println("Il resto è " + resto);
int [] monete = {50,20,10,5,2,1};
for (int i: monete)
{
int quantita = resto / i;
resto = resto % i;
System.out.println("Monete da : " +i+ "= "+ quantita );
}
Ultima modifica 10 Marzo 2022