Задачи - УПП, Седмица 10, 15.12.2023
GitHub classroom: classroom.github.com/a/EJcTQRz4
Във всички задачи трябва да използвате рекурсия!
Задача 1
#Най-големия общ делител на числата a
и b
е най-голямото, число което ги дели без остатък.
Евклидовият алгоритъм се базира на факта, че за две положителни числа a
и b
, като a > b
, НОД на a
и b
е същия като НОД на a - b
и b
и когато a = b
, тогава НОД на a
и b
е тяхната стойност.
От входа получавате две цели положителни числа и трябва да изкарате техния НОД, чрез алгоритъма на Евклид имплементиран с рекурсия.
Примери:
Вход | Изход |
---|---|
6 6 | 6 |
48 18 | 6 |
Задача 2
#От входа получавате неотрицателно число N
, което ще бъде някое число на Фибоначи.
Трябва да върнете кое по ред е, като 0 е нулевото, 1 е първото, 2 е третото, 3 е четвъртото и так. нат.
Напомням, че математически фибоначи се дефинира така:
Примери:
Вход | Изход |
---|---|
0 | 0 |
1 | 1 |
3 | 4 |
144 | 12 |
1597 | 17 |
46368 | 24 |
Задача 3
#От входа получавате положително число N
, трябва да изкарате на екрана “рисунка”, показваща формата на пясъчен часовник с височина 2N
(вижте примерите).
Примери:
Вход | Изход |
---|---|
1 | + |
2 | +++ |
3 | +++++ |
5 | +++++++++ |
Задача 4
#От входа получавате число N
, след това тябва да изкарате на нови редове, в нарастващ ред, всички двоични числа, които могат да се представят с N
-бита.
Вкарвате и водещи нули, тоест всяко число е съставено от точно N
букви (N
нули и единици).
Примери:
Вход | Изход |
---|---|
1 | 0 1 |
2 | 00 01 10 11 |
3 | 000 001 010 011 100 101 110 111 |
4 | 0000 0001 … 0111 1000 1001 … 1101 1110 1111 |
Задача 5
#Получавате един ред от терминала, в който ще имате скоби, знакът +
и *
, шпации и числа.
Това е прост математически израз, трябва да изкарате резултата след неговото пресмятане, като винаги около число + число
и число * число
има скоби (тоест не е нужно да се притеснявате от приоритет и асоциативност).
За удобство спокойно може да ползвате atoi
за конверитране на числовите части от низа в числа.
Примери:
Вход | Изход |
---|---|
(1 + 2) | 3 |
((2 + 9) * 3) | 33 |
(((8 * 1) * (56 + 4)) + (19 * 2)) | 518 |