Задачи - УПП, Седмица 10, 15.12.2023

GitHub classroom: classroom.github.com/a/EJcTQRz4

important Във всички задачи трябва да използвате рекурсия!

Задача 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 е четвъртото и так. нат. Напомням, че математически фибоначи се дефинира така:

F(0) = 0; F(1) = 1; F(n) = F(n-1) + F(n-2)

Примери:

Вход Изход
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