Website Summary Files Commits Branches @commit @diff @stats
path: root / Week13 / Exercise09.cpp
diff options
context:
space:
mode:
Commit5c3b97fb2572ce8940439abd0652d2a7f7a623bd (patch)
Author
 Syndamia <kamen@syndamia.com>
2026-01-11 13:43:39 +0200
Committer
 Syndamia <kamen@syndamia.com>
2026-01-11 13:43:39 +0200
Filesc122f6fba2c8ac11ea022cc4b63fa89798994915 /Week13/Exercise09.cpp
upp-2025-solutions-5c3b97fb2572ce8940439abd0652d2a7f7a623bd.tar
upp-2025-solutions-5c3b97fb2572ce8940439abd0652d2a7f7a623bd.tar.gz
upp-2025-solutions-5c3b97fb2572ce8940439abd0652d2a7f7a623bd.zip
Parent3c427559e32750c40bbd0d95b525ea42e3b37fc7 (diff)
feat(Week13): Add solutions to most exercises
1 files changed, 49 insertions, 0 deletions
-rw-r--r--Week13/Exercise09.cpp49
diff --git a/Week13/Exercise09.cpp b/Week13/Exercise09.cpp
new file mode 100644
index 0000000..7b1f8fc
--- /dev/null
+++ b/Week13/Exercise09.cpp
@@ -0,0 +1,49 @@
+#include <iostream>
+
+/* Едно ниво на рекурсия обработва едно ниво на скоби.
+ *
+ * Тоест, при "(())", първата и последнта скоба са първото
+ * ниво на скоби, "()" в центъра са второто ниво.
+ * В "()()()" имаме три чивта скоби на едно ниво.
+ *
+ * Искаме на текущото ниво, за всяка отваряща скоба да има затваряща,
+ * и искаме това да е изпълнено и за всяко вътрешно/долно ниво.
+ *
+ * Има два начина това да не е изпълнено: ако липсва отваряща скоба
+ * или ако липсва затваряща.
+ * Съответно, или няма да влезем в цикъла или ще излезем рано от него.
+ * Което означава, че няма да инкрементираме str.
+ *
+ * Тоест, str е един вид указателя към последната буква, преди
+ * която скобите са балансирани.
+ */
+bool balanced(const char*& str) {
+ while (*str == '(') {
+ str += 1;
+
+ balanced(str);
+
+ if (*str != ')')
+ return false;
+
+ str += 1;
+ }
+
+ return *str == '\0';
+}
+
+int main() {
+ const unsigned MAX_LEN = 1024;
+
+ char line[MAX_LEN];
+ std::cin.getline(line, MAX_LEN);
+
+ const char* ptr = line;
+
+ if (balanced(ptr))
+ std::cout << "Balanced" << std::endl;
+ else
+ std::cout << "Not balanced" << std::endl;
+
+ return 0;
+}