Problem 2 - Mathematical Expression
Привет на всички,
Относно втората задача " Mathematical Expression", накратко в условието е казано да използваме функция която проверява дали всяка скоба има своята обратна, обаче нямам идея как трябва да изглежда самата функция. След дълго ровене из нета в търсене на решение, в повечето случеи се използват стекове, а другия вариант който открих е да цепим стринга и да пазим бройка за всяка скоба да има обратна, но отново нямам идея как да го осъществя като код, защото нищо не схаванах от кода на другите. Пробвах се да хардкодна, макар че ми беше ясно, че няма да взема пълните точки в Judge, но все пак ми даде 60/100.
Макар, да е в страни от темата, би ли хръвлил малко разяснения върху този синтаксис, тъй като изглежда малко по-advanced от това, което сме учили до момента. Горе долу си обясних как са нещата, но не бих отказал малко допълнителни обяснения :)
Иначе го пробвах и наистина работи :)
- инициализира масив от charove с първи елемент равен на 2
- чети по един чар докато не стигнеш до нов ред, запиши прочетения чар в e[1]
- aко e[1] НЕ завършва на 01 в бинарния си запис, значи е отваряща скоба
- Използваме първия елемент на масива е като брояч, който го инициализирахме с 2. Записваме прочетения char в поредния елемент от масива, като нашият брояч ни казва индекса на елемента. Заедно с тази операция ние увеличаваме брояча.
- Ако не е отваряща скоба => гледаме дали последната отваряща е с максимум 2 по-малка от сегашната затваряща. Ако не е => имаме размешкани скоби и нулираме брояча, което прави следващия char да се запише в самият брояч. Това кара програмата да прескочи няколко индекса и следователно всяка следваща операция ще е грешна, което ще накара следващата проверка да каже че expressiona e грешен. Заедно с тази проверка ние намаляваме брояча.
- puts: печата даден стринг. Ако всяка скоба е била затворена И скобите не са били размешкани, то брояча трябва да се озове обратно със стойност 2. => тогава печатаме че expression-a е валиден. Иначе невалиден.
Мега добро обяснение! Благодаря за което!
Това е най-най-краткото решение на задачата, което съм виждал до момента.