[C++] Piastrelle

Giovanni vuole piastrellare il suo bagno. Il suo bagno è grande lxN e lui vorrebbe piastrellarlo con piastrelle grandi 1×2 e 1X1. Giovanni vuole decidere come piastrellare il suo bagno. Stampa a Giovanni tutte le possibili piastrellature del bagno, in modo da aiutarlo a scegliere.

Input
Il file ‘input.txt’ è costituito da un unico numero N, la dimensione del bagno.

Output
In questo file devono comparire tante righe quante sono le possibili piastrellature del bagno. Ogni piastrellatura possibile deve essere stampata in questo modo. Se la piastrella è da 1X1, stampare [O] (senza virgolette). Se la piastrella è da 1X2, stampare [OOOO], senza virgolette. Le piastrellature devono essere stampate in ordine lessicografico in base alla grandezza delle piastrelle.

Assunzioni 1 ≤ N ≤ 25

input.txt           output.txt
4                      [O][O][O][O]
[O][O][OOO]
[O][OOO][O]
[OOO][O][O]
[OOO][OOO]

Noi andremo, con una funzione ricorsiva, a scrivere  riga per riga le piastrellature.
Se ci fate caso questo problema si basa sui numeri di Fibonacci; per risolvere il numero di Fibonacci ci sono due principali algoritmi: uno basato sulla ricorsione (molto  lento) e uno molto veloce iterativo.
Risolvere questo problema iterativamente però è molto difficile, e considerato che in questo caso il massimo è 25 (numero relativamente basso) la soluzione ricorsiva non da problemi.

 

Related Posts Plugin for WordPress, Blogger...