PDA

View Full Version : [java] esercizio


dagu92
22-10-2013, 10:26
Un tappeto magico di ordine n (0 ≤ n ≤ 5) e parametro k (0 ≤ k < 9) `
e una matrice 3^n × 3^n , a valori binari, definita induttivamente nel seguente modo:
• se n = 0 (matrice 1 × 1), allora l’unico elemento della matrice vale 1;
• se n > 0 (matrice 3^n × 3^n ), si consideri una suddivisione della matrice in 9
blocchi di dimensioni 3^n−1 × 3^n−1 ciascuno. Si considerino numerati da 0 a 8
i blocchi, in questo modo:
0 1 2
3 4 5
6 7 8
Il blocco numero j (0 ≤ j < 9) `
e a sua volta
– un blocco di elementi tutti uguali a zero, se j = k;
– un tappeto magico di ordine n − 1 e parametro k, se j = k.
Si vuole realizzare un programma Java che dati n e k stampi una rappresentazione
testuale di un tappeto magico di ordine n e parametro k.
Formato di Input. L’input `
e strutturato nel seguente modo:
• una riga contenente i due interi n e k, separati da uno spazio.
Si assuma che n e k soddisfino i vincoli 0 ≤ n ≤ 5, 0 ≤ k < 9.
Formato di Output. Si deve stampare un tappeto magico di ordine n e parametro
k, secondo la seguente codifica:
• i valori uguali a 0 sono rappresentati dal carattere ’.’;
• i valori uguali a 1 sono rappresentati dal carattere ’*’.
I valori su una stessa riga non sono separati da spazi. Ciascuna riga della matrice `
e
terminata dall’usuale newline ’\n’.


mi potete aiutare a cercare di risolvere questo esercizio? o almeno darmi un idea su come fare? Grazie!

Player1
23-10-2013, 20:57
Allora ti do qualche suggerimento.
Ti conviene suddividere il problema in 3 fasi:
1 - Inizializzazione
2 - Popolamento ricorsivo dei blocchi
3 - Stampa a video della matrice risultante.

1 - Nell'inizializzazione crei un metodo main che inizializzi le variabili n k e la matrice che dovrai stampare (il tappeto magico).

2 - Con un metodo ricorsivo scrivi i dati nella matrice che hai creato al passo precedente

3 - Stampi i dati a video

EDIT:
No! Scusami, ti ho detto una sciocchezza, non è quello il modo di procedere.
Non devi creare nessuna matrice, devi ragionare per stringhe.
1 - Recuperi solo le variabili n e k.
2 - Crei un metodo ricorsivo che restituisce una stringa.
3 - Stampi la stringa risultante.

Suggerimento 1: Una stringa può contenere più linee al suo interno ad esempo ***\n***\n***\n è una sola stringa formata da tre righe.
Suggerimento 2: Ogni volta che operi all'interno di un blocco (escluso il passo base) riceverai 9 stringhe relative ai suoi 9 sottoblocchi, devi riassemblare le stringhe per formare un'unica stringa da restituire e non basta semplicemente concatenarle...
Suggerimento 3: Java dispone di una comoda classe "StringTokenizer" che potrebbe esserti utile nella risoluzione dell'esercizio, specialmente nella fase in cui dalle 9 stringhe risultanti dai sottoblocchi devi ottenere la stringa del blocco.

Se hai ancora dubbi, chiedi pure, ma almeno prova per un po' a risolverlo seguendo i miei suggerimenti, ho cercato di rimanere vago per lasciarti lo spazio per ragionarci su ;)