Informatică, întrebare adresată de sikesjack1, 8 ani în urmă

Buna!
Ma puteti ajuta la problema #3795 Paranteze4 de pe pbinfo?

Cerința
Să se scrie un program care citește un șir de paranteze rotunde care se închid corect (corect parantezat) în care parantezele deschise sunt numerotate de la stânga la dreapta, îndepând de la 1, și determină pentru fiecare paranteză închisă numărul de ordine al parantezei deschise corespunzătoare.

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

S este șirul vid, sau
S = (T) și T este corect parantezat, sau
S = AB, iar A și B sunt corect parantezate.
Date de intrare
Programul citește de la tastatură șir de paranteze rotunde, corect parantezat.

Date de ieșire
Programul va afișa pe ecran, pentru fiecare paranteză închisă, poziția în șir a parantezei deschise corespunzătoare.

Restricții și precizări
șirul citit va conține cel mult 254 de caractere, numai ( și );
în șirul dat caracterele sunt numerotate de la 1.



Exemplu
Intrare

()((()())())
Ieșire

1 4 5 3 6 2
Explicație
1 2 3 4 5 6
( ) ( ( ( ) ( ) ) ( ) )
1 4 5 3 6 2


Am rezolvat problema dar nu merge si n am nici o idee cum sa o fac mai bine.


daniel22: trebuie sa ai un numar de ordine pe care sa il adaugi in stiva cand intalnesti '(', iar cand intalnesti ')' scoti primul element din stiva.
sikesjack1: adica un contor?
sikesjack1: #include
#include
using namespace std;
int stack[100];
void push(int x,int& dim)
{
stack[dim] = x;
++dim;
}
void pop(int& dim)
{

cout << stack[dim]<<" ";
dim--;
}
int main()
{
char s[256];
cin >> s;
int ctr = 0;
int l = strlen(s);
int dim = 0;
for (int i = 0; i < l; i++)
{
if (s[i] == '(')
{
push(i, ctr);
}
else
{
pop(ctr);

}
}
}
sikesjack1: tot nu merge

Răspunsuri la întrebare

Răspuns de daniel22
3

Răspuns:

#include <iostream>

#include <string.h>

using namespace std;

int stack[100];

void push(int x,int& dim)

{

   stack[dim] = x;

   ++dim;

}

void pop(int& dim)

{

   dim--;

   cout << stack[dim]<<" ";

}

int main()

{

   char s[256];

   cin >> s;  

   int ctr = 0;

   int l = strlen(s);

   int dim = 0;

   for (int i = 0; i < l; i++)

   {

       if (s[i] == '(')

       {

           ctr++;

           push(ctr, dim);

       }

       else

       {

           pop(dim);

       }

   }

}

Alte întrebări interesante