Summary Files Commits Branches @commit @diff @stats
path: root / src
diff options
context:
space:
mode:
Commitf5af450ddd0b4acd5eaef0b1d86eb8d52dcb85b1 (patch)
Author
 Syndamia <kamen@syndamia.com>
2026-01-11 13:46:18 +0200
Committer
 Syndamia <kamen@syndamia.com>
2026-01-11 13:46:18 +0200
Files4a58b5ae436ac82eecc8791048e5151ce8c1c746 /src
syndamia.com-f5af450ddd0b4acd5eaef0b1d86eb8d52dcb85b1.tar
syndamia.com-f5af450ddd0b4acd5eaef0b1d86eb8d52dcb85b1.tar.gz
syndamia.com-f5af450ddd0b4acd5eaef0b1d86eb8d52dcb85b1.zip
Parent8a04ba93727a6d6fe2ac33965bcd9c58465356eb (diff)
feat(teaching/upp-2025/w13); Add (most) solutions
2 files changed, 60 insertions, 3 deletions
-rw-r--r--src/teaching/upp-2025/index.du1
-rw-r--r--src/teaching/upp-2025/week13/index.du62
diff --git a/src/teaching/upp-2025/index.du b/src/teaching/upp-2025/index.du
index ee38131..a71a345 100644
--- a/src/teaching/upp-2025/index.du
+++ b/src/teaching/upp-2025/index.du
@@ -174,4 +174,5 @@
|:
|:
[url ./week13 Задачи]
+|| [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13 Решения]
|| [url https://classroom.github.com/a/8vTquPOY GitHub Classroom]
diff --git a/src/teaching/upp-2025/week13/index.du b/src/teaching/upp-2025/week13/index.du
index e60c77f..1ff00e7 100644
--- a/src/teaching/upp-2025/week13/index.du
+++ b/src/teaching/upp-2025/week13/index.du
@@ -13,6 +13,8 @@ GitHub Classroom: [url https://classroom.github.com/a/8vTquPOY]
### Задача 1
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise01.cpp Решение]
+
Реализирайте програма, която по подаден положителен размер изкарва "стълбище" от плюсове.
.warn Както с всички останали задачи, решете условието с рекурсия!
@@ -50,6 +52,8 @@ GitHub Classroom: [url https://classroom.github.com/a/8vTquPOY]
### Задача 2
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise02.cpp Решение]
+
Припомняме, че в [url https://en.wikipedia.org/wiki/Fibonacci_sequence редицата на Фибоначи], всеки следвавщ елемент е сумата на предходните два, като първите два елемента са 0 и 1.
От входа получавате неотрицателен индекс, трябва да изкарате съответното число на Фибоначи.
@@ -84,6 +88,8 @@ GitHub Classroom: [url https://classroom.github.com/a/8vTquPOY]
### Задача 3
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise03.cpp Решение]
+
От входа получавате цяло неотрицателно число.
Изкарайте сумата на всички негови цифри.
@@ -105,6 +111,8 @@ GitHub Classroom: [url https://classroom.github.com/a/8vTquPOY]
### Задача 4
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise04.cpp Решение]
+
От входа получавате един ред с текст.
Трябва да обърнете реда на всички букви в текста и да изкарате резултата.
@@ -131,6 +139,8 @@ He should not have built the fire under the pine tree.
### Задача 5
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise05.cpp Решение]
+
От входа получавате цяло неотрицателно число.
Изкарайте "хълм" от плюсове с размер, подаденото число.
@@ -176,6 +186,8 @@ He should not have built the fire under the pine tree.
### Задача 6
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise06.cpp Решение]
+
Напишете рекурентна функция, която по подадени две цели числа [`a`] и [`b`], връща сумата [=и=] средното аритметично на всички числа между [`a`] и [`b`], включително.
От входа получавате две цели числа.
@@ -194,6 +206,8 @@ He should not have built the fire under the pine tree.
### Задача 7
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise07.cpp Решение]
+
От входа получавате неотрицателно цяло число - брой битове.
Изкарайте всички възможни двоични числа, съставени от броя битове.
@@ -224,6 +238,8 @@ He should not have built the fire under the pine tree.
### Задача 8
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise08.cpp Решение]
+
От входа получавате неотрицателен индекс, трябва да изкарате преплетената поредица от числа на Фибоначи, от първото до това на подадения индекс.
По-точно, трябва резултатните елементи на четните индекси да представляват редицата на Фибоначи в нарастващ ред, и тези на нечетните индекси да са същата редица в намаляващ ред.
@@ -246,6 +262,8 @@ He should not have built the fire under the pine tree.
### Задача 9
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise09.cpp Решение]
+
От входа получавате низ, съставен само и единствено от отварящи и затварящи кръгли скоби.
Трябва да върнете дали скобите са балансирани, т.е. дали след всяка отваряща скоба, съществува "нейна си" затаваряща скоба, по-нататък в низа.
@@ -286,6 +304,8 @@ He should not have built the fire under the pine tree.
### Задача 10
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise10.cpp Решение]
+
Използвайки [=опашкова рекурсия=], имплементирайте функция която приема масив от реални числа и връща сумата на всички тях.
От входа получавате неотрицателно число N и след това N на брой реални числа.
@@ -304,6 +324,8 @@ He should not have built the fire under the pine tree.
### Задача 11
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise11.cpp Решение]
+
Напишете програма, която решава [url https://en.wikipedia.org/wiki/Ages_of_Three_Children_puzzle пъзела с възрастта на трите деца].
В пъзела знаете сумата на възрастите на трите деца, умножението на възрастите, както и факта, че едно от децата е най-голямо.
@@ -323,25 +345,38 @@ He should not have built the fire under the pine tree.
### Задача 12
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise12.cpp Решение]
+
От входа получавате неотрицателно число N и след това N на брой цели числа.
-Трябва да изкарате дължината на най-дългата [=нарастваща=] подредица (под-последователност) от числа.
+Трябва да изкарате дължината на най-дългата [=строго нарастваща=] подредица (под-последователност) от числа.
+
+.note
+[*(11.01.2026)*] Поправени примери
:table_2
|= Вход
|= Изход
-|: 8 10 9 2 5 3 7 101 18
+|: 7 1 2 3 4 1 2 3
+|: 4
+
+|: 7 1 2 3 1 2 3 4
|: 4
+|: 8 10 9 2 3 5 7 101 18
+|: 5
+
|: 5 7 7 7 7 7
|: 1
-|: 16 0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15
+|: 16 0 2 8 4 12 10 6 14 1 3 5 9 11 13 7 15
|: 6
### Задача 13
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise13.cpp Решение]
+
Напишете програма, която решава [url https://en.wikipedia.org/wiki/Takuzu Такузу пъзели].
Пъзлите са формулирани така: в дъска 4 на 4 трябва да се попълнят нули и единици, така че на всяка колона и ред да има еднакъв брой нули и единици.
@@ -401,6 +436,8 @@ He should not have built the fire under the pine tree.
### Задача 14
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise14.cpp Решение]
+
Един от най-простите алгоритми за псевдо-случайни числа е [url https://en.wikipedia.org/wiki/Lehmer_random_number_generator генератора на Лемер].
Започвайки от "seed" [`X[_0_]`], всяко следващо случайно число [`X[_k+1_]`] е равно на [`(a * X[_k_]) mod m`], където [`а`] и [`m`] са константи.
@@ -425,6 +462,8 @@ He should not have built the fire under the pine tree.
### Задача 15
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise15.cpp Решение]
+
Във физиката, можем да определим позицията на едно тяло по елиптична (Кеплерова) орбита чрез екцентричната аномалия.
Обаче, на практика тя не се намира директно, ами се изчисляват средната аномалия и ексцентрицитетът на елипсата.
@@ -437,6 +476,7 @@ He should not have built the fire under the pine tree.
Трябва да върнете (приближение на) екцентричната аномалия, като рекурсията ви трябва да се "вложи" максимум "дълбочина" на брой пъти.
За дъно на рекурсията, може да върнете стойността [`M`].
+Използвайте [`<cmath>`] за синус функцията.
:table_2
|= Вход
@@ -454,6 +494,8 @@ He should not have built the fire under the pine tree.
### Задача 16
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise16.cpp Решение]
+
От входа получавате две неотрицателни цели числа.
Изкарайте техния най-голям общ делител, използвайки [url https://en.wikipedia.org/wiki/Euclidean_algorithm алгоритъма на Евклид]:
@@ -475,6 +517,8 @@ He should not have built the fire under the pine tree.
### Задача 17
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise17.cpp Решение]
+
От входа получавате един ред с текст.
Трябва да изкарате дали текста е палиндром.
@@ -497,6 +541,8 @@ racecar racecar
### Задача 18
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise18.cpp Решение]
+
От входа получавате цяло неотрицателно число и цифра, между 1 и 9.
Трябва да изкарате бройката срещания на цифрата в числото.
@@ -516,6 +562,8 @@ racecar racecar
### Задача 19
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise19.cpp Решение]
+
Един от начините да изчислим стойността на биномен коефициент е чрез следната рекурентна връзка:
[image ./img/binom.png]
@@ -552,6 +600,8 @@ racecar racecar
### Задача 21
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise21.cpp Решение]
+
[url https://en.wikipedia.org/wiki/Levenshtein_distance Разстоянието на Ливенщайн] е метод за измерване на разликата между два низа.
Смята се по следния начин:
@@ -590,6 +640,8 @@ Winterland
### Задача 22
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise22.cpp Решение]
+
Аритметико-геометричното на две числа [`a`] и [`b`] се дефинира чрез следната рекурентна връзка:
[image ./img/agm.png]
@@ -613,6 +665,8 @@ Winterland
### Задача 23
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise23.cpp Решение]
+
Използвайки [=опашкова рекурсия=], напишете функция, която получава масив от цели числа и връща най-големия елемент от тях.
От входа получавате неотрицателно цяло [`N`] и след това [`N`] на брой цели числа.
@@ -631,6 +685,8 @@ Winterland
### Задача 24
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise24.cpp Решение]
+
Чрез бездънни дроби можем да представим редица функции/изрази, за които няма точна формула.
От входа получавате реално число [`x`] и дълбочина [`n`], върнете [`e[^x^]`] използвайки: