2015-04-17 8 views
5

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 parentesi n
    • In nessun momento v'è una parentesi di chiusura che non è stato aperto

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

+1

il tuo codice funziona senza errori per me. ho provato 'write (4, 0, 0, 0);' e 'write (14, 0, 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

+0

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

risposta

3

sto usando Python 2.7.9, ma fondamentalmente il problema è che si sta utilizzando raw_input(), che ottiene di ingresso nella forma di una stringa.

Se solo convertire che in un intero utilizzando int(), il codice funzionerà:

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]), #add a comma here 
         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 = int(raw_input()) #change the input to an integer 

write(n, 0, 0, 0) 

Inoltre, ho aggiunto una virgola dopo la sua dichiarazione di stampa, per cui sarebbe uscita in questo modo:

>>> 
3 
() () () 

() (()) 

(()) () 

(() ()) 

((())) 
Problemi correlati