Софтуерно Инженерство
Loading...
+ Нов въпрос
ArmenPotourlyan avatar ArmenPotourlyan 487 Точки

В нета намерих следната дефиниция на Balanced Parenthesis:

Balanced parentheses means that each opening symbol has a corresponding closing symbol and the pairs of parentheses are properly nested.

 

Не знам какво има в последния тест, но по горната дефиниция аз успях да измисля тест, с който програмата ти не се справя: ({}[]). На този тест трябва да получиш изход YES.

2
kaloyannikov avatar kaloyannikov 527 Точки

Ще ти дам жокер : трябва да проверяваш ако имаш затваряща скоба дали съоветсва на последната отваряща

0
24/05/2016 10:51:55
valenteeeen avatar valenteeeen 6 Точки

Здравейте!

На мен Judge - а, също ми дава 77 точки и не мога да разбера, какво не съм предвидил ... !

using System;
using System.Collections.Generic;

class _07_00_BalancedParenthesis

    static void Main()
    {
        string inStr = Console.ReadLine();
        
        Queue<int> que = new Queue<int>();
        int n = inStr.Length / 2;
        Queue<char> que1 = new Queue<char>();
        Queue<char> que2 = new Queue<char>();
        for (int i = 0; i < n; i++)
        {
            que1.Enqueue(inStr[i]);
            que2.Enqueue(inStr[inStr.Length - 1 - i]);
            
            char a = que1.Dequeue(), b = que2.Dequeue();

            if ( a == '{' && b == '}' ) que.Enqueue(i);
            if ( a == '}' && b == '{' ) que.Enqueue(i);
            if ( a == '[' && b == ']' ) que.Enqueue(i);
            if ( a == ']' && b == '[' ) que.Enqueue(i);
            if ( a == '(' && b == ')' ) que.Enqueue(i);
            if ( a == ')' && b == '(' ) que.Enqueue(i);
            if ( a == ' ' && b == ' ' ) que.Enqueue(i);
        }
        if (que.Count == n)
        {
            Console.WriteLine("YES");
        }
        else Console.WriteLine("NO");
    }
}

0
slav.petkov avatar slav.petkov 26 Точки

Здравей, valenteeen,

погледнах решението ти. Ще ти дам една идея - имаш нужда само от един Stack<char>. Когато прочетеш отваряща скоба, слагаш я вътре. При прочитане на затваряща, взимаш скоба от стека и проверяваш дали си съответства със затварящата.

УСПЕХ!

 

1
valenteeeen avatar valenteeeen 6 Точки

Здравейте! Благодаря за съвета! Ще се опитам да го изпълня! Дано да се получи очавания ефект!! 

0
snakera avatar snakera 10 Точки

ето го последният тест,аз също се опитвам да я докарам до 100 

()(((({{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}))))

0
sevdalin avatar sevdalin 37 Точки

Единият от тестовете не минаваше, защото има подводен камък, който е че може да имаме следната "отваряща" скоба ) и съответно "затварящата" трябва да е (, което няма голяма логика ама ...

А за теста, който си писал, че е последният. Според мен отговора е подаден грешно в Judge, няма как да започва с () и да свършва с )) и да бъде YES резултата, не отговаря на условието на задачата. Иначе като го "хард корнах" и псожих просто if проверка за този string и тогава да бие YES, даде 100/100. Но според мен е сбъркано в Judge...

0
georgiab avatar georgiab 34 Точки

Благодаря ти много, това ме побъркваше!!!!!

В условието обаче изрично е описано, че "Each character of the sequence will be one of {, }, (, ), [, ].". Никъде не се споменава за ),( като валидна комбинация.

Моля, някой от СофтУни да оправи условието за да не докарват психически разтройства на студентите си :)

1
sotirona avatar sotirona 25 Точки

И аз се чудих много време, благодаря!

0
mad_cop avatar mad_cop 6 Точки

Ето едно решение за 100/100

https://pastebin.com/iCamUJ8Q

дано съм бил полезен

0
Dokka avatar Dokka 1 Точки

С това решение може и да имаш 100 точки, но има грешка, която е допуснал и лектора на упражненията. Ако вкараш първо затваряща скоба програмата гърми.

0