Rezolvare completă PbInfo #852 Paranteze3

Cerința

Se dau n șiruri de paranteze rotunde sau pătrate. Să se stabilească, despre fiecare șir, dacă este corect parantezat – adică dacă parantezele se închid corect.

Un șir de paranteze S rotunde este corect parantezat dacă:

  • S este șirul vid, sau
  • S = (T) și T este corect parantezat, sau
  • S = [T] și T este corect parantezat, sau
  • S = AB, iar A și B sunt corect parantezate.

Date de intrare

Fișierul de intrare paranteze3.in conține pe prima linie numărul n, pe următoarele n linii câte un șir de paranteze rotunde sau pătrate.

Date de ieșire

Fișierul de ieșire paranteze3.out va conține n linii: fiecare linie va conține valoarea 1, dacă șirul corespunzător de paranteze este corect parantezat și 0 în caz contrar.

Restricții și precizări

  • 1 ≤ n ≤ 100
  • fiecare șir va avea cel mult 255 de paranteze

Exemplu

paranteze3.in

4
()[]
)([]
()[(()[])()]
([)]

paranteze3.out

1
0
1
0

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Paranteze3:

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

ifstream fin("paranteze3.in");
ofstream fout("paranteze3.out");

int n;
char s[256];
char stiva[256];

int main()
{
    fin >> n;
    for(int k = 1 ; k <= n ; k ++)
    {
        fin >> s;
        int ok = 1;
        int nivel = 0;
        for(int i = 0 ; s[i] && ok ; i ++)
            if(s[i] == '(')
                stiva[++nivel]='(';
            else
                if(s[i] == '[')
                    stiva[++nivel]='[';
                else
                    if(nivel > 0)
                    {
                        if(s[i] == ')')
                            if(stiva[nivel] == '(')
                                nivel --;
                            else
                                ok = 0;
                        else
                            if(stiva[nivel] == '[')
                                nivel --;
                            else
                                ok = 0;
                    }
                    else
                        ok = 0;
        if(nivel > 0)
            ok = 0;
        fout << ok << "\n";
    }
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #852 Paranteze3

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #852 Paranteze3 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!