2016-01-30 4 views
0

ниже. Я загрузил код, чтобы проверить, сбалансированы ли скобки в строке или нет. Они работают для 1 ввода, но для нескольких тестовых систем правильный выход не работает. ПОЖАЛУЙСТА, ПОМОГАЙТЕСЬ.некорректный вывод при использовании тестовых корпусов, иначе он работает нормально (используются стеки)

int main() 
{ 
    int t; 
    cin >>t; 
    cin.ignore(); 
    while(t--) 
    { 
     { 

      stack s; 
      char *st; 
      st=new char[100]; 
      gets(st); 

      s.create(strlen(st)); 

      if(!count_elem(st))//counts if the brackets are in pairs or not 
       cout << "NO" <<endl; 
      else 
      func1(s,st); 

     } 
    } 
    return 0; 
} 


void func1(stack s,char *st) 
{ 
    static int i=0,flag=0; 
    // printf("%d %d\n",i,flag); 
    if(st[i]=='(' || st[i]=='{' || st[i]=='[') 
    { 
     flag=1; 
     s.push(st[i]); 
    } 
    else 
     { 
      if(s.isEmpty()) 
       flag=0; 
      else 
      { 

       if(st[i]=='}') 
        { 
         //printf("%c\n",s.get_top()); 
         if(s.get_top()=='{') 
         { 
          flag=1; 
          s.pop(); 

         } 
         else 
          flag=0; 

        } 

       if(st[i]==')') 
        { 
         //printf("%c\n",s.get_top()); 
         if(s.get_top()=='(') 
         { 
          flag=1; 
          s.pop(); 

         } 
         else 
          flag=0; 

        } 

      if (st[i]==']') 
        { 
         //printf("%c\n",s.get_top()); 
         if(s.get_top()=='[') 
         { 
          flag=1; 
          s.pop(); 

         } 
         else 
          flag=0; 

        } 
      } 
     } 
    i++; 
    if(flag==1) 
    { 
     if(i<strlen(st)) 
     func1(s,st); 
     else 
      cout << "YES"<<endl; 
    } 

     else 
     cout << "NO"<< endl; 



} 
+0

Для какого теста это не удается? – Beta

+0

первый тестовый тест всегда правильный, но он просто показывает некоторый случайный вывод для всех остальных тестовых примеров. – cooltogo

+0

Первый, а? Я не спрашивал вас, сколько * тестов он терпит неудачу, я не спрашивал вас *, в каком порядке * вы запускаете прохождение и неудачные тесты, я просил провалить тест. Голосование закрывается. – Beta

ответ

0

Проблема в том, ... когда программа переходит от одного к другому TestCase, это не переинициализировать я = 0, флаг = 0 ... потому что они были объявлены как статические variables.What может быть сделано вместо этого .... объявить i, флаг глобально .... и назначить i = 0; флаг = 0; как раз перед первым вызовом func() для каждого тестового теста ....

int main() 

{ 
    int t; 
    cin >>t; 
    cin.ignore(); 
    while(t--) 
    { 
     { 

      stack s; 
      char *st; 
      st=new char[100]; 
      gets(st); 

      s.create(strlen(st)); 

      if(!count_elem(st)) 
       cout << "NO" <<endl; 
      else 
      { 
       i=0; 
       flag=0; 
       func1(s,st); 

      } 


     delete []st; 
     } 
    } 
    return 0; 
}