PDA

View Full Version : [JAVA] Come risolvere questo esercizio complicato?


andbin
01-03-2006, 10:14
Sul libro che ho preso per la preparazione all'esame SCJP ci sono parecchi esercizi di test. Uno di questi esercizi l'ho trovato davvero un po' complicato (almeno per me ;) ) in quanto è praticamente una specie di ... puzzle.

Il codice che riporto adesso l'ho creato io come esempio ed è simile a quello riportato nel libro.
Dato il seguente codice:
class Calcolo {
public static void main(String[] args) {
short x = 8;
short y = 3;

x __ __;
__ __ __;
__ __ __;
__ __ __;

System.out.println(x);
}
}
inserire negli spazi __ i seguenti frammenti in modo da usarli tutti 1 volta sola per ottenere alla fine la stampa del numero 46:
+= -= *= *= x x y y y y y

Visto che il libro dice che nell'esame vero e proprio ci possono essere domande come questa ... mi sto un po' preoccupando! :cry:

Quale è il metodo migliore per risolvere questo esercizio?? C'è un metodo in particolare da seguire??

pisto
01-03-2006, 14:09
ma... cosa c'entra questo con la proigrammazione??? a me sembra un giochino da settimana enigmistica...

pisto
01-03-2006, 14:16
adesso non ponso pensarci approfonditamente, ma per logica, a meno che ci siano trucchetti, il nono _ è occupato da una x e il 2 da un'y

Fenomeno85
01-03-2006, 14:16
ma... cosa c'entra questo con la proigrammazione??? a me sembra un giochino da settimana enigmistica...

appunto :D

~§~ Sempre E Solo Lei ~§~

sottovento
01-03-2006, 15:18
In effetti e' strano... beh, con la programmazione c'entra, ma non c'entra tanto con la programmazione Java (l'esame deve approndire quello, giusto?).

Penso non ci sia un sistema standard per affrontare questo tipo di problemi. Se pero' hai un computer, e' possibile affrontarli a forza bruta.

Facendo due conti:
- hai 7 variabili e 4 operatori da posizionare.

Essendo pigro di natura, considero i simboli tutti diversi, per cui avresti
7! * 4! = 5040 * 24 = 120960 diverse sequenze.
In realta' i simboli non sono tutti diversi, per cui se vuoi fare le cose di fino avresti 5040 / 240 = 21 diverse possibilita' per posizionare le variabili, e 12 per sistemare gli operatori.

E' quindi possibile andare di forza bruta ed aspettarsi il risultato in max 1 secondo.

Come fare?
Questo e' stato un bel problema di informatica per un bel po' di tempo: la numerazione delle permutazioni (sono pigro, preferisco permutare senza ottimizzare e lasciar fare piu' conti al computer, posso aspettare anche 1 secondo e mezzo).

Infatti, se le potresti numerare, potresti scrivere:

for (int i = 0; i < 120960; i++)
{
if (risultato_permutazione(i) == 46)
// ritorna la permutazione
}

Per nostra fortuna il problema di elencare le permutazioni e' stato risolto in piu' modi, con una serie di algoritmi eleganti. Ti basta cercare su google.

Se in realta' non puoi usare un pc, chiedo scusa per l'OT

High Flying
Sottovento