sto cercando di scrivere un programma che (Per un dato naturale n
, non superiore a 50):Un programma dovrebbe scrivere tutti parantheses corrette in Python
Scrive tutte le possibili combinazioni di
2n
parentesi che sono corrette, il che significa che in ogni riga del otput c'è una sequenza di parentesi con quelle proprietà:- la sequenza è
n
aperta, chiusa parentesin
- In nessun momento v'è una parentesi di chiusura che non è stato aperto
- la sequenza è
ho fatto quasi esattamente lo stesso codice in Java e funziona perfettamente, ma in qualche modo le seguenti pause codice:
MAX = 100;
arr = [];
for i in range(0, MAX):
arr.append(' ');
def write(n, pos, op, cl):
if (cl == n):
for i in range(0, MAX):
if arr[i] != ' ':
print(arr[i]);
else:
break;
print("\n");
else:
if (op > cl):
arr[pos] = ')';
write(n, pos+1, op, cl+1);
if (op < n):
arr[pos] = '(';
write(n, pos+1, op+1, cl);
n = raw_input();
write(n, 0, 0, 0);
l'idea è piuttosto semplice, ma quando sto cercando di farlo funzionare, ottengo un errore che indica che a un certo punto la dichiarazione
arr[pos] = '(';
È illegale dal momento che la variabileè >= MAX
Non ho ancora familiarità con Python, ma non riesco a vedere il motivo dal punto di vista algoritmico.
mi farebbe piacere qualche idea
il tuo codice funziona senza errori per me. ho provato 'write (4, 0, 0, 0);' e 'write (14, 0, 0, 0);' –
Bene, sembra che se io chiamo la funzione senza ottenere n da raw_input, il codice funziona. Hai un'idea del perché? – Jytug
per 100 parentesi ('2n = 100',' n = 50') ci sono [1978261657756160653623774456] (http://www.wolframalpha.com/input/?i=50th+catalan+number) possibili [combinazioni] (http : //en.wikipedia.org/wiki/Catalan_number#Applications_in_combinatorics). Stai davvero provando a stamparli tutti? – mata