Проблем с последната задача - Balanced Brackets, от Data types and variables, more exercises
Здравейте, някой дали може да види защо тест 2 не се получава при решението ми? Правих го по няколко начина и все 85 точки.
https://pastebin.com/Q3PQM3SP
Здравейте, някой дали може да види защо тест 2 не се получава при решението ми? Правих го по няколко начина и все 85 точки.
https://pastebin.com/Q3PQM3SP
Здравей,
мисля, че проблемът е че не проверяваш правилно за случая с нествани скоби. Провери на първия нулев тест, като добавиш вложени скоби, че резултатът въпреки това е "BALANCED".
Виж моето решение https://pastebin.com/zA0TB3wb
Ето ви още едно решение с малко обяснения. Опитах се да го опростя максимално - кодът, не обяснението към него. :D
Имам булева, която първоначално е false - ей така, за всеки случай.
Броим отварящите скоби и броим затварящите. Като при всяко преброяване на затваряща, проверявам дали някъде преди нея е имало отваряща. Т.е. ако затварящите станат 1, трябва и отварящите преди това да са 1, за да е балансирано и тогава сетваме булевата на true. Ако отварящите преди това са били 2 или повече или изобщо е нямало и са си 0, тогава няма да се влезе в тази проверка. Ако обаче влезе в проверката значи са 1 на 1 и освен, че сетваме булевата на true, нулираме броячите, за да може следващия път да работят по същия начин. Щом в момента има баланс, реално няма значение колко точно са скобите общо досега, важно е какво става от тук натам.
Имам си и else проверка, защото ако се окаже, че при първа затваряща и съответно нулиране на броячите, булевата се е сетнала на true, а при втора затваряща условието за true вече не е изпълнено, булевата трябва пак да стане false. Тук също връщаме броячите на 0, за да не може да излезе, че е балансирано при ( ( ) ) .
Извън цикъла имам същата проверка - дали броят отварящи и затварящи скоби е равен, пак по същата логика - за да може ако веднъж е станало true, но повече не е влизало в горните проверки, а всъщност вече не е true, да се оправи. Например, ако след постигане на баланс веднъж, е имало още една отваряща скоба, без да има затваряща след нея (тогава изобщо не се стига до самите проверки вътре в цикъла).
И накрая според true или false, си принтирам резултата.
Супер, благодаря, макар че и аз вече бях решила задачата.
UNBALANCED e
А промени ли в началото броя редове, които се четат от 8 на 10, колкото са с добавените скоби? Тогава резултатът е "BALANCED", въпреки вложените скоби. Иначе не се прочитат всички редове и просто броя отварящи скоби не съвпада с броя затварящи, а не се отчита постъпването на две скоби от един вид последователно. Мисля, че ако сетваш стойността на булевата проверка при получаване на поредната скоба за да следиш при следващата дали не е от същия вид ще сработи, защото ти сега ги сетваш на "true" непосредствено преди проверката и те де факто, не проверават това което се очаква от тях.
Дано да успях да го формулирам що годе разбираемо :)
Успех!
Здравейте,
при мен тест номер 5 гърми.Не мога да се сетя за частния случей, който пропускам. Ако може някой да подскаже кой от случеите изпускам без да дава код, ще съм благодарен.
Ето го и кода:
https://pastebin.com/uYYtGXhr