Задачи - УПП, Седмица 13, 08.01.2026
GitHub Classroom: https://classroom.github.com/a/8vTquPOY
За решаване
Задача 1
Реализирайте програма, която по подаден положителен размер изкарва "стълбище" от плюсове.
| Вход | Изход |
|---|---|
| 5 |
|
| 2 |
|
| 7 |
|
Задача 2
Припомняме, че в редицата на Фибоначи, всеки следвавщ елемент е сумата на предходните два, като първите два елемента са 0 и 1.
От входа получавате неотрицателен индекс, трябва да изкарате съответното число на Фибоначи.
| Вход | Изход |
|---|---|
| 5 | 5 |
| 6 | 8 |
| 0 | 0 |
| 1 | 1 |
| 2 | 1 |
| 12 | 144 |
| 33 | 3524578 |
Задача 3
От входа получавате цяло неотрицателно число. Изкарайте сумата на всички негови цифри.
| Вход | Изход |
|---|---|
| 123 | 6 |
| 1000 | 1 |
| 37581149 | 38 |
Задача 4
От входа получавате един ред с текст. Трябва да обърнете реда на всички букви в текста и да изкарате резултата.
| Вход | Изход |
|---|---|
|
|
|
|
Задача 5
От входа получавате цяло неотрицателно число. Изкарайте "хълм" от плюсове с размер, подаденото число.
| Вход | Изход |
|---|---|
| 4 |
|
| 2 |
|
| 7 |
|
Задача 6
Напишете рекурентна функция, която по подадени две цели числа a и b, връща сумата и средното аритметично на всички числа между a и b, включително.
От входа получавате две цели числа.
Използвайки вашата функция, изкарайте сумата и средното аритметично на всички цели числа в интервала [a, b].
| Вход | Изход |
|---|---|
| 0 5 | 15 2.5 |
| -8 14 | 69 3 |
Задача 7
От входа получавате неотрицателно цяло число - брой битове. Изкарайте всички възможни двоични числа, съставени от броя битове.
| Вход | Изход |
|---|---|
| 2 |
|
| 3 |
|
Задача 8
От входа получавате неотрицателен индекс, трябва да изкарате преплетената поредица от числа на Фибоначи, от първото до това на подадения индекс. По-точно, трябва резултатните елементи на четните индекси да представляват редицата на Фибоначи в нарастващ ред, и тези на нечетните индекси да са същата редица в намаляващ ред.
| Вход | Изход |
|---|---|
| 5 | 0 5 1 3 1 2 2 1 3 1 5 0 |
| 8 | 0 21 1 13 1 8 2 5 3 3 5 2 8 1 13 1 21 0 |
| 0 | 0 0 |
Задача 9
От входа получавате низ, съставен само и единствено от отварящи и затварящи кръгли скоби. Трябва да върнете дали скобите са балансирани, т.е. дали след всяка отваряща скоба, съществува "нейна си" затаваряща скоба, по-нататък в низа.
| Вход | Изход |
|---|---|
| Not balanced |
| Not balanced |
| Balanced |
| Balanced |
| Balanced |
Задача 10
Използвайки опашкова рекурсия, имплементирайте функция която приема масив от реални числа и връща сумата на всички тях.
От входа получавате неотрицателно число N и след това N на брой реални числа. Използвайки вашата функция, изкарайте сумата на всички реални числа.
| Вход | Изход |
|---|---|
| 5 1 2 3 4 5 | 15 |
| 9 8.3 5.1 90 45.44 19.99 -32 7 -2 0 | 141.83 |
Задача 11
Напишете програма, която решава пъзела с възрастта на трите деца. В пъзела знаете сумата на възрастите на трите деца, умножението на възрастите, както и факта, че едно от децата е най-голямо.
От входа получавате две положителни числа: сумата и произведението на възрастите. Трябва да изкарате резултата:
| Вход | Изход |
|---|---|
| 14 72 | 3 3 8 |
| 13 36 | 2 2 9 |
Задача 12
От входа получавате неотрицателно число N и след това N на брой цели числа. Трябва да изкарате дължината на най-дългата нарастваща подредица (под-последователност) от числа.
| Вход | Изход |
|---|---|
| 8 10 9 2 5 3 7 101 18 | 4 |
| 5 7 7 7 7 7 | 1 |
| 16 0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15 | 6 |
Задача 13
Напишете програма, която решава Такузу пъзели.
Пъзлите са формулирани така: в дъска 4 на 4 трябва да се попълнят нули и единици, така че на всяка колона и ред да има еднакъв брой нули и единици. Допълнително, на всеки ред и колона, не може да има повече от две последователни еднакви числа.
От входа получавате нерешен такузу пъзел, където "празните" позиции са маркирани с -1. Трябва да изкарате решение на пъзела.
| Вход | Изход |
|---|---|
|
|
|
|
|
|
За упражнение
Задача 14
Един от най-простите алгоритми за псевдо-случайни числа е генератора на Лемер.
Започвайки от "seed" X0, всяко следващо случайно число Xk+1 е равно на (a * Xk) mod m, където а и m са константи.
Нека да фиксираме a = 16807 и m = 231 - 1.
От входа получавате две положителни цели числа: "seed" и бройка N.
Трябва да изкарате всички произволни числа X1 до XN.
| Вход | Изход |
|---|---|
| 1337 3 | 22470959 1859769514 521725159 |
| 0 5 | 0 0 0 0 0 |
| 1 5 | 16807 282475249 1622647863 947787490 1578127215 |
Задача 15
Във физиката, можем да определим позицията на едно тяло по елиптична (Кеплерова) орбита чрез екцентричната аномалия. Обаче, на практика тя не се намира директно, ами се изчисляват средната аномалия и ексцентрицитетът на елипсата.
Чрез уравнението на Кеплер, можем да изведем следната рекурентна връзка за екцентричната аномалия:
Където M е средната аномалия и e е ексцентрицитетът на елипсата.
От входа получавате две реални числа, M и e, както и цяло положително число "дълбочина".
Трябва да върнете (приближение на) екцентричната аномалия, като рекурсията ви трябва да се "вложи" максимум "дълбочина" на брой пъти.
За дъно на рекурсията, може да върнете стойността M.
| Вход | Изход |
|---|---|
| 10.831 5.2 4 | 9.36247 |
| 0 2 8 | 0 |
| 1 2 8 | 1.42528 |
Задача 16
От входа получавате две неотрицателни цели числа. Изкарайте техния най-голям общ делител, използвайки алгоритъма на Евклид:
| Вход | Изход |
|---|---|
| 48 18 | 6 |
| 42 56 | 14 |
| 13 17 | 1 |
Задача 17
От входа получавате един ред с текст. Трябва да изкарате дали текста е палиндром.
| Вход | Изход |
|---|---|
| Not a palindrome |
| Is a palindrome |
Задача 18
От входа получавате цяло неотрицателно число и цифра, между 1 и 9. Трябва да изкарате бройката срещания на цифрата в числото.
| Вход | Изход |
|---|---|
| 1880 8 | 2 |
| 42 3 | 0 |
| 1111 1 | 4 |
Задача 19
Един от начините да изчислим стойността на биномен коефициент е чрез следната рекурентна връзка:
От входа получавате две неотрицателни цели числа n и k.
Трябва да изкарате съответния биномен коефициент, използвайки рекурентната връзка.
| Вход | Изход |
|---|---|
| 6 3 | 20 |
| 20 4 | 4845 |
| 9 9 | 1 |
Задача 20
Напишете програма, която "изиграва" всички възможни игри на морски шах и връща в колко тях някой печели и в колко от тях никой не печели.
| Вход | Изход |
|---|---|
| Wins: 209088 Draws: 46080 |
Задача 21
Разстоянието на Ливенщайн е метод за измерване на разликата между два низа. Смята се по следния начин:
Където с x[1..] бележим остатък от низа x, след първата буква.
От входа получавате два реда с текст. Трябва да върнете разстоянието на Ливенщайн между тях.
| Вход | Изход |
|---|---|
| 3 |
| 0 |
| 1 |
Задача 22
Аритметико-геометричното на две числа a и b се дефинира чрез следната рекурентна връзка:
От входа получавате две реални числа, a и b, и брой итерации n.
Изкарайте резултатното аритметико-геометрично число, като за дъно на рекурсията можете да върнете an+1.
| Вход | Изход |
|---|---|
| 5 6 0 | 5.5 |
| 5 6 4 | 5.48861 |
| 0.18 0.2 8 | 0.189868 |
Задача 23
Използвайки опашкова рекурсия, напишете функция, която получава масив от цели числа и връща най-големия елемент от тях.
От входа получавате неотрицателно цяло N и след това N на брой цели числа.
Използвайки вашата функция, изкарайте най-голямото число.
| Вход | Изход |
|---|---|
| 5 -1 6 -2 9 0 | 9 |
| 6 1 1 1 1 1 1 | 1 |
Задача 24
Чрез бездънни дроби можем да представим редица функции/изрази, за които няма точна формула.
От входа получавате реално число x и дълбочина n, върнете ex използвайки:
Като, всеки "етаж" от дробта е единица дълбочина (и първото ниво е 0).
| Вход | Изход |
|---|---|
| 1 5 | 2.71667 |
| 1 10 | 2.71828 |
| 0.5 8 | 1.64872 |
| 3.14159 15 | 23.1406 |
Задача 25
От входа получавате положителни цели размери на матрица от букви.
След това получавате стойностите на самата матрица, като буквата # определя стена и . определя празно пространство.
Накрая получавате двойка индекси (координат) в матрицата. Трябва да запълните всички празни клетки, които са достижими от подадения координат (като не може да се минаава през стените).
Задача 26
От входа получавате недовършен судоку пъзел, където празните клетки са отбелязани с -1. Трябва да намерите и изкарате решение(то) на пъзела.
| Вход | Изход |
|---|---|
|
|
Задача 27
Редицата на Рекаман се дефинира по следния начин:
- първия елемент (с индекс
n = 0) е 0 - всеки следващ елемент е равен на предходния минус
n, ако резултата ще е положително и резултата не е срещан преди - иначе, всеки следващ елемент е равен на предходния плюс
n
От входа получавате цяло неотрицателно чило n, изкарайте n-тото число от редицата на Рекаман.
| Вход | Изход |
|---|---|
| 3 | 6 |
| 20 | 42 |
| 0 | 0 |
| 1 | 1 |
Задача 28
Напишете програма, която връща бройката решения на пъзела на 8те царици.
Пъзела е формулиран така: имате шахматна дъска (8 на 8) и върху нея имате 8 царици. Припомняме, че царицата се движи вертикално, хоризонтално и диагонално по дъската. Целта на пъзела е цариците да се поставят така, че нито една царица да не може да вземе никоя друга.
| Вход | Изход |
|---|---|
| 92 |
Задача 29
От входа получавате положителни цели размери на матрица от букви.
След това получавате стойностите на самата матрица, като буквата # определя стена и . определя празно пространство.
Накрая получавате две двойки координати (индекси) в матрицата. Трябва да изкарате дали има път по празните пространства, така че да се придвижите от началните (първите) координати до финалните (вторите).
Задача 30
От входа получавате два реда с текст. Първия ще наречем "регулярен израз", докато втория е подадения ни низ.
Регулярния израз представлява шаблон. Целта е да изкараме дали подадения низ съответства на шаблона.
За нашите цели, регулярнят израз ще има следния формат: започвайки от началото, всяка буква директно съответства на буква в подадения низ.
Обаче, имаме специалната буква *, която казва, че предходната буква може да се повтори нула или повече пъти.
Тоест, ако в регулярния израз нямаме *, на практика проверяваме дали двата низа съвпадат.
В случаите когато имаме *, пробваме да съпоставим буквата, например в регулярен израз "a*", низовете "", "a", "aa", "aaa" съответстват.
Използвайте рекурсия, за да решите всички тези задачи!
Както с всички останали задачи, решете условието с рекурсия!