Website Summary Files Commits Branches @commit @diff @stats
path: root / Week05
diff options
context:
space:
mode:
Commit9242ebc4c69f2c1f550ddcc0e9235f3f409554c7 (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-11-01 20:27:21 +0200
Committer
 Syndamia <kamen@syndamia.com>
2025-11-01 20:27:21 +0200
Files8a49b14236dca88758fa72781ef15144e9cbc214 /Week05
upp-2025-solutions-9242ebc4c69f2c1f550ddcc0e9235f3f409554c7.tar
upp-2025-solutions-9242ebc4c69f2c1f550ddcc0e9235f3f409554c7.tar.gz
upp-2025-solutions-9242ebc4c69f2c1f550ddcc0e9235f3f409554c7.zip
Parent69de8ecfb2df52a6a4ae9d75f6a018ae380cca05 (diff)
feat(Week05): Add exercises and solutions
23 files changed, 894 insertions, 0 deletions
-rw-r--r--Week05/Exercise01.cpp14
-rw-r--r--Week05/Exercise02.cpp16
-rw-r--r--Week05/Exercise03.cpp26
-rw-r--r--Week05/Exercise04.cpp20
-rw-r--r--Week05/Exercise05.cpp22
-rw-r--r--Week05/Exercise05_QuestionSolution.cpp25
-rw-r--r--Week05/Exercise06.cpp27
-rw-r--r--Week05/Exercise07.cpp19
-rw-r--r--Week05/Exercise08.cpp32
-rw-r--r--Week05/Exercise09.cpp25
-rw-r--r--Week05/Exercise10.cpp24
-rw-r--r--Week05/Exercise11.cpp22
-rw-r--r--Week05/Exercise12.cpp26
-rw-r--r--Week05/Exercise13.cpp23
-rw-r--r--Week05/Exercise14.cpp26
-rw-r--r--Week05/Exercise15.cpp16
-rw-r--r--Week05/Exercise16.cpp24
-rw-r--r--Week05/Exercise17.cpp33
-rw-r--r--Week05/Exercise18.cpp29
-rw-r--r--Week05/Exercise19.cpp30
-rw-r--r--Week05/Exercise20.cpp23
-rw-r--r--Week05/Exercise21.cpp21
-rw-r--r--Week05/README.md371
diff --git a/Week05/Exercise01.cpp b/Week05/Exercise01.cpp
new file mode 100644
index 0000000..73c05cc
--- /dev/null
+++ b/Week05/Exercise01.cpp
@@ -0,0 +1,14 @@
+#include <iostream>
+
+int main() {
+ float numbers[10];
+ for (int i = 0; i < 10; i++) {
+ std::cin >> numbers[i];
+ }
+
+ for (int i = 9; i >= 0; i--) {
+ std::cout << numbers[i] << ' ';
+ }
+
+ return 0;
+}
diff --git a/Week05/Exercise02.cpp b/Week05/Exercise02.cpp
new file mode 100644
index 0000000..0fb1bb2
--- /dev/null
+++ b/Week05/Exercise02.cpp
@@ -0,0 +1,16 @@
+#include <iostream>
+
+int main() {
+ const unsigned int SIZE = 7;
+
+ char letters[SIZE];
+ for (int i = 0; i < SIZE; i++) {
+ std::cin >> letters[i];
+ }
+
+ for (int i = 0; i < SIZE; i++) {
+ std::cout << letters[(i + 4) % SIZE] << ' ';
+ }
+
+ return 0;
+}
diff --git a/Week05/Exercise03.cpp b/Week05/Exercise03.cpp
new file mode 100644
index 0000000..5c0dfcb
--- /dev/null
+++ b/Week05/Exercise03.cpp
@@ -0,0 +1,26 @@
+#include <iostream>
+
+int main() {
+ const unsigned int SIZE = 14;
+
+ unsigned int numbers[SIZE];
+ for (int i = 0; i < SIZE; i++) {
+ std::cin >> numbers[i];
+ }
+
+ unsigned int largest = 0;
+ for (int i = 0; i < SIZE; i++) {
+ if (numbers[i] > largest)
+ largest = numbers[i];
+ }
+
+ unsigned int second_largest = largest;
+ for (int i = 0; i < SIZE; i++) {
+ if (numbers[i] < largest && (numbers[i] > second_largest || second_largest == largest))
+ second_largest = numbers[i];
+ }
+
+ std::cout << second_largest;
+
+ return 0;
+}
diff --git a/Week05/Exercise04.cpp b/Week05/Exercise04.cpp
new file mode 100644
index 0000000..d7d4b1b
--- /dev/null
+++ b/Week05/Exercise04.cpp
@@ -0,0 +1,20 @@
+#include <iostream>
+
+int main() {
+ unsigned int factorial_max, power;
+ std::cin >> factorial_max >> power;
+
+ unsigned int factorial = 1;
+ for (unsigned int i = 1; i <= factorial_max; i++) {
+ factorial *= i;
+ }
+
+ unsigned int to_power = 1;
+ for (unsigned int i = 1; i <= power; i++) {
+ to_power *= factorial;
+ }
+
+ std::cout << to_power;
+
+ return 0;
+}
diff --git a/Week05/Exercise05.cpp b/Week05/Exercise05.cpp
new file mode 100644
index 0000000..9592bff
--- /dev/null
+++ b/Week05/Exercise05.cpp
@@ -0,0 +1,22 @@
+#include <iostream>
+
+int main() {
+ const unsigned int SIZE = 18;
+
+ int numbers[SIZE];
+ for (int i = 0; i < SIZE; i++) {
+ std::cin >> numbers[i];
+ }
+
+ for (int i = 0; i < SIZE; i++) {
+ if (numbers[i] == 0)
+ std::cout << numbers[i] << ' ';
+ }
+
+ for (int i = 0; i < SIZE; i++) {
+ if (numbers[i] != 0)
+ std::cout << numbers[i] << ' ';
+ }
+
+ return 0;
+}
diff --git a/Week05/Exercise05_QuestionSolution.cpp b/Week05/Exercise05_QuestionSolution.cpp
new file mode 100644
index 0000000..3714aeb
--- /dev/null
+++ b/Week05/Exercise05_QuestionSolution.cpp
@@ -0,0 +1,25 @@
+#include <iostream>
+
+/* Отговорът е не, не са нужни масиви. */
+
+int main() {
+ const unsigned int SIZE = 18;
+
+ unsigned int zero_count = 0;
+ int number;
+
+ for (int i = 0; i < SIZE; i++) {
+ std::cin >> number;
+
+ if (number == 0)
+ zero_count++;
+ else
+ std::cout << number << ' ';
+ }
+
+ for (int i = 0; i < zero_count; i++) {
+ std::cout << 0 << ' ';
+ }
+
+ return 0;
+}
diff --git a/Week05/Exercise06.cpp b/Week05/Exercise06.cpp
new file mode 100644
index 0000000..e418fa4
--- /dev/null
+++ b/Week05/Exercise06.cpp
@@ -0,0 +1,27 @@
+#include <iostream>
+
+int main() {
+ const unsigned int SIZE = 15;
+
+ int current_number, prev_number;
+ unsigned int size_current_series = 1, size_longest_series = 0;
+
+ std::cin >> prev_number;
+ for (int i = 1; i < SIZE; i++) {
+ std::cin >> current_number;
+
+ if (prev_number > current_number)
+ size_current_series = 0;
+
+ size_current_series++;
+
+ if (size_current_series > size_longest_series)
+ size_longest_series = size_current_series;
+
+ prev_number = current_number;
+ }
+
+ std::cout << size_longest_series;
+
+ return 0;
+}
diff --git a/Week05/Exercise07.cpp b/Week05/Exercise07.cpp
new file mode 100644
index 0000000..350747b
--- /dev/null
+++ b/Week05/Exercise07.cpp
@@ -0,0 +1,19 @@
+#include <iostream>
+
+int main() {
+ unsigned int number;
+ std::cin >> number;
+
+ unsigned int sum = 0;
+ for (int div = 1; div < number; div++) {
+ if (number % div == 0)
+ sum += div;
+ }
+
+ if (sum == number)
+ std::cout << "Perfect" << std::endl;
+ else
+ std::cout << "Not perfect" << std::endl;
+
+ return 0;
+}
diff --git a/Week05/Exercise08.cpp b/Week05/Exercise08.cpp
new file mode 100644
index 0000000..47fa376
--- /dev/null
+++ b/Week05/Exercise08.cpp
@@ -0,0 +1,32 @@
+#include <iostream>
+
+int main() {
+ const unsigned int SIZE = 10;
+
+ /* Става по-елегантно ако използваме един масив */
+ double row1[SIZE], row2[SIZE];
+ for (int i = 0; i < SIZE; i++) {
+ std::cin >> row1[i];
+ }
+ for (int i = 0; i < SIZE; i++) {
+ std::cin >> row2[i];
+ }
+
+ char operation;
+ std::cin >> operation;
+
+ double result;
+ for (int i = 0; i < SIZE; i++) {
+ switch (operation) {
+ case '+': result = row1[i] + row2[i]; break;
+ case '-': result = row1[i] - row2[i]; break;
+ case '*': result = row1[i] * row2[i]; break;
+ case '/': result = row1[i] / row2[i]; break;
+ }
+ std::cout << result << ' ';
+ }
+
+ std::cout << std::endl;
+
+ return 0;
+}
diff --git a/Week05/Exercise09.cpp b/Week05/Exercise09.cpp
new file mode 100644
index 0000000..adcd5b1
--- /dev/null
+++ b/Week05/Exercise09.cpp
@@ -0,0 +1,25 @@
+#include <iostream>
+
+int main()
+{
+ double z;
+ unsigned int n;
+ std::cin >> z >> n;
+
+ double base = z - 1;
+ double sum = 0;
+
+ for (unsigned int i = 1; i <= n; i++) {
+ double to_power = 1;
+
+ for (unsigned j = 1; j <= i; j++) {
+ to_power *= base;
+ }
+
+ sum += ((i + 1) % 2 ? -1.0 : 1.0) * to_power / i;
+ }
+
+ std::cout << sum << std::endl;
+
+ return 0;
+}
diff --git a/Week05/Exercise10.cpp b/Week05/Exercise10.cpp
new file mode 100644
index 0000000..64fbb4a
--- /dev/null
+++ b/Week05/Exercise10.cpp
@@ -0,0 +1,24 @@
+#include <iostream>
+
+int main() {
+ const unsigned int DIGITS = 8;
+ const unsigned int WEIGHTS[DIGITS] = { 8, 6, 4, 2, 3, 5, 9, 7 };
+
+ unsigned int serial_number;
+ std::cin >> serial_number;
+
+ unsigned int sum = 0;
+ for (int i = DIGITS - 1; i >= 0; i--) {
+ sum += (serial_number % 10) * WEIGHTS[i];
+ serial_number /= 10;
+ }
+
+ unsigned int control_digit = 11 - sum % 11;
+
+ if (control_digit == 10) control_digit = 0;
+ else if (control_digit == 11) control_digit = 5;
+
+ std::cout << control_digit << std::endl;
+
+ return 0;
+}
diff --git a/Week05/Exercise11.cpp b/Week05/Exercise11.cpp
new file mode 100644
index 0000000..906734f
--- /dev/null
+++ b/Week05/Exercise11.cpp
@@ -0,0 +1,22 @@
+#include <iostream>
+
+int main() {
+ unsigned int lucas_i = 2, lucas_j = 1;
+ unsigned int number;
+ std::cin >> number;
+
+ while (number > 0) {
+ for (unsigned int i = 0; i < number; i++) {
+ unsigned int old = lucas_j;
+ lucas_j += lucas_i;
+ lucas_i = old;
+ }
+
+ std::cout << lucas_i << ' ';
+ std::cin >> number;
+ }
+
+ std::cout << lucas_i << std::endl;
+
+ return 0;
+}
diff --git a/Week05/Exercise12.cpp b/Week05/Exercise12.cpp
new file mode 100644
index 0000000..eac5f08
--- /dev/null
+++ b/Week05/Exercise12.cpp
@@ -0,0 +1,26 @@
+#include <iostream>
+
+int main() {
+ const unsigned int SIZE = 20;
+
+ unsigned short indecies[SIZE];
+ bool visited[SIZE];
+ for (unsigned int i = 0; i < SIZE; i++) {
+ std::cin >> indecies[i];
+ visited[i] = false;
+ }
+
+ unsigned int current_index = 0, jumps = 0;
+ while (current_index != SIZE - 1 && !visited[current_index]) {
+ visited[current_index] = true;
+ current_index = indecies[current_index];
+ jumps++;
+ }
+
+ if (current_index != SIZE - 1)
+ std::cout << "Infinity" << std::endl;
+ else
+ std::cout << jumps << std::endl;
+
+ return 0;
+}
diff --git a/Week05/Exercise13.cpp b/Week05/Exercise13.cpp
new file mode 100644
index 0000000..cc43afe
--- /dev/null
+++ b/Week05/Exercise13.cpp
@@ -0,0 +1,23 @@
+#include <iostream>
+
+int main() {
+ const unsigned int SIZE = 8;
+
+ int numbers[SIZE];
+ for (unsigned int i = 0; i < SIZE; i++) {
+ std::cin >> numbers[i];
+ }
+
+ int search;
+ std::cin >> search;
+
+ unsigned int occurrences = 0;
+ for (unsigned int i = 0; i < SIZE; i++) {
+ if (numbers[i] == search)
+ occurrences++;
+ }
+
+ std::cout << occurrences << std::endl;
+
+ return 0;
+}
diff --git a/Week05/Exercise14.cpp b/Week05/Exercise14.cpp
new file mode 100644
index 0000000..56c5d57
--- /dev/null
+++ b/Week05/Exercise14.cpp
@@ -0,0 +1,26 @@
+#include <iostream>
+
+int main() {
+ const unsigned int SIZE = 16;
+
+ int numbers[SIZE];
+ for (unsigned int i = 0; i < SIZE; i++) {
+ std::cin >> numbers[i];
+ }
+
+ for (unsigned int i = 0; i < SIZE; i++) {
+ if (numbers[i] % 2 == 0)
+ std::cout << numbers[i] << ' ';
+ }
+
+ std::cout << std::endl;
+
+ for (unsigned int i = 0; i < SIZE; i++) {
+ if (numbers[i] % 2 != 0)
+ std::cout << numbers[i] << ' ';
+ }
+
+ std::cout << std::endl;
+
+ return 0;
+}
diff --git a/Week05/Exercise15.cpp b/Week05/Exercise15.cpp
new file mode 100644
index 0000000..6a874bc
--- /dev/null
+++ b/Week05/Exercise15.cpp
@@ -0,0 +1,16 @@
+#include <iostream>
+
+int main() {
+ const unsigned int SIZE = 12;
+
+ double numbers[SIZE];
+ for (unsigned int i = 0; i < SIZE; i++) {
+ std::cin >> numbers[i];
+ }
+
+ for (unsigned int i = 0; i < SIZE / 2; i++) {
+ std::cout << numbers[i] << ' ' << numbers[SIZE - 1 - i] << std::endl;
+ }
+
+ return 0;
+}
diff --git a/Week05/Exercise16.cpp b/Week05/Exercise16.cpp
new file mode 100644
index 0000000..21652e5
--- /dev/null
+++ b/Week05/Exercise16.cpp
@@ -0,0 +1,24 @@
+#include <iostream>
+
+int main() {
+ const unsigned int SIZE = 5;
+
+ int row1[SIZE], row2[SIZE];
+ for (int i = 0; i < SIZE; i++) {
+ std::cin >> row1[i];
+ }
+ for (int i = 0; i < SIZE; i++) {
+ std::cin >> row2[i];
+ }
+
+ for (int i = 0; i < SIZE * 2; i++) {
+ if (i % 2 == 0)
+ std::cout << row1[i / 2] << ' ';
+ else
+ std::cout << row2[(i - 1) / 2] << ' ';
+ }
+
+ std::cout << std::endl;
+
+ return 0;
+}
diff --git a/Week05/Exercise17.cpp b/Week05/Exercise17.cpp
new file mode 100644
index 0000000..fce4b64
--- /dev/null
+++ b/Week05/Exercise17.cpp
@@ -0,0 +1,33 @@
+#include <iostream>
+
+int main() {
+ unsigned int number;
+ std::cin >> number;
+
+ unsigned int number_length, number_copy = number;
+
+ for (number_length = 0; number_copy != 0; number_length++) {
+ number_copy /= 10;
+ }
+
+ unsigned int sum = 0;
+ number_copy = number;
+
+ while (number_copy != 0) {
+ unsigned int to_power = 1, digit = number_copy % 10;
+
+ for (unsigned int i = 0; i < number_length; i++) {
+ to_power *= digit;
+ }
+
+ sum += to_power;
+ number_copy /= 10;
+ }
+
+ if (number == sum)
+ std::cout << "Narcissistic" << std::endl;
+ else
+ std::cout << "Not narcissistic" << std::endl;
+
+ return 0;
+}
diff --git a/Week05/Exercise18.cpp b/Week05/Exercise18.cpp
new file mode 100644
index 0000000..2bda68c
--- /dev/null
+++ b/Week05/Exercise18.cpp
@@ -0,0 +1,29 @@
+#include <iostream>
+
+int main() {
+ const unsigned int SIZE = 7;
+
+ int numbers[SIZE];
+ for (unsigned int i = 0; i < SIZE; i++) {
+ std::cin >> numbers[i];
+ }
+
+ int left_sum = 0, right_sum = 0;
+ for (unsigned int i = 1; i < SIZE; i++) {
+ right_sum += numbers[i];
+ }
+
+ unsigned int balance_index = 0;
+ while (balance_index < SIZE && left_sum != right_sum) {
+ left_sum += numbers[balance_index];
+ balance_index++;
+ right_sum -= numbers[balance_index];
+ }
+
+ if (balance_index == SIZE)
+ std::cout << "No such index" << std::endl;
+ else
+ std::cout << balance_index << std::endl;
+
+ return 0;
+}
diff --git a/Week05/Exercise19.cpp b/Week05/Exercise19.cpp
new file mode 100644
index 0000000..baad3c7
--- /dev/null
+++ b/Week05/Exercise19.cpp
@@ -0,0 +1,30 @@
+#include <iostream>
+
+int main()
+{
+ double x;
+ unsigned int n;
+ std::cin >> x >> n;
+
+ double sum = 0;
+
+ for (unsigned int k = 0; k <= n; k++) {
+ unsigned int l = 2 * k + 1;
+
+ double to_power = 1;
+ for (unsigned p = 1; p <= l; p++) {
+ to_power *= x;
+ }
+
+ unsigned int fac = 1;
+ for (unsigned i = 1; i <= l; i++) {
+ fac *= i;
+ }
+
+ sum += (k % 2 ? -1.0 : 1.0) * to_power / fac;
+ }
+
+ std::cout << sum << std::endl;
+
+ return 0;
+}
diff --git a/Week05/Exercise20.cpp b/Week05/Exercise20.cpp
new file mode 100644
index 0000000..b44c0b3
--- /dev/null
+++ b/Week05/Exercise20.cpp
@@ -0,0 +1,23 @@
+#include <iostream>
+
+int main() {
+ unsigned int number;
+ std::cin >> number;
+
+ unsigned int check_digit = number % 10;
+ number /= 10;
+
+ unsigned int sum = 0, digit = 0;
+ for (unsigned int multiplier = 2; number != 0; multiplier = multiplier % 2 + 1, number /= 10) {
+ digit = (number % 10) * multiplier;
+ if (digit > 9) digit -= 9;
+ sum += digit;
+ }
+
+ if ((10 - (sum % 10)) % 10 == check_digit)
+ std::cout << "Valid" << std::endl;
+ else
+ std::cout << "Invalid" << std::endl;
+
+ return 0;
+}
diff --git a/Week05/Exercise21.cpp b/Week05/Exercise21.cpp
new file mode 100644
index 0000000..1572372
--- /dev/null
+++ b/Week05/Exercise21.cpp
@@ -0,0 +1,21 @@
+#include <iostream>
+
+int main() {
+ unsigned int n;
+ std::cin >> n;
+
+ unsigned long f1 = 1, f2 = 1, f3 = 1;
+ for (unsigned long i = 1; i <= 2 * n; i++) {
+ f1 *= i;
+ if (i <= n + 1)
+ f2 *= i;
+ if (i <= n)
+ f3 *= i;
+ }
+
+ unsigned long catalan = f1 / (f2 * f3);
+
+ std::cout << catalan << std::endl;
+
+ return 0;
+}
diff --git a/Week05/README.md b/Week05/README.md
new file mode 100644
index 0000000..3a0c9ce
--- /dev/null
+++ b/Week05/README.md
@@ -0,0 +1,371 @@
+# Задачи
+
+<https://syndamia.com/teaching/upp-2025/week05/>
+
+> [!WARNING]
+> Имайте предвид, че не всички задачи се решават с масиви!
+
+## За решаване
+
+### Задача 1
+
+От входа получавате 10 реални числа.
+Трябва да ги върнете в обратен ред.
+
+|Вход|Изход|
+|---|---|
+|1 2 3 4 5 6 7 8 9 10|10 9 8 7 6 5 4 3 2 1|
+|41.4 89.95 65 34.799 18.62 100.001 84.55 69.21 6 39.8|
+|39.8 6 69.21 84.55 100.001 18.62 34.799 65 89.95 41.4|
+
+### Задача 2
+
+От входа получавате 7 букви.
+Трябва да изкарате буквите в същата последователност, обаче завъртяни надясно с 3 позиции.
+
+|Вход|Изход|
+|---|---|
+|a b c d e f g|e f g a b c d|
+|k l m l j l b|j l b k l m l|
+
+### Задача 3
+
+От входа получавате 14 цели неотрицателни числа.
+Трябва да изкарате второто най-голямо число.
+Ако няма такова, просто изкарайте най-голямото.
+
+|Вход|Изход|
+|---|---|
+|1 2 3 4 5 6 7 8 9 10 11 12 13 14|13|
+|505 19 899 0 232 61 546 6 65 259 55 389 326 760|760|
+|9 9 9 9 9 9 9 9 9 9 9 9 9 9|9|
+
+### Задача 4
+
+От входа получавате две цели положителни числа.
+Трябва да върнете [факториел](https://en.wikipedia.org/wiki/Factorial#Definition) от първото число, който факториел е повдигнат на степен второто число.
+
+Факториел на едно (неотрицателно цяло) число е умножението на всички цели числа от 1 до самото число включително.
+Примерно, факториел от 5 е `1 * 2 * 3 * 4 * 5 = 120`.
+
+|Вход|Изход|
+|---|---|
+|5 1|120|
+|5 2|14400|
+|3 6|46656|
+|4 3|13824|
+|1 183|1|
+|2 8|256|
+
+### Задача 5
+
+От входа получавате 18 цели числа.
+Трябва да изкарате същата поредица числа, обаче всички нули са в началото на редицата.
+
+|Вход|Изход|
+|---|---|
+|1 0 0 2 3 4 0 5 0 6 0 0 0 7 8 0 9 0|0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9|
+|0 839 643 42 -694 57 650 729 -434 0 35 155 176 873 40 0 658 0|
+|0 0 0 0 839 643 42 -694 57 650 729 -434 35 155 176 873 40 658|
+
+.question
+Нужни ли са масиви, ако в условието трябваше да изкарвате нулите в края на поредицата?
+
+### Задача 6
+
+От входа получавате 15 цели числа.
+Трябва да изкарате дължината на най-дългата последователност от числа, която е подредена в нарастващ ред.
+
+Последователност от числа, която съдържа еднакви числа, също се зачита за сортирана в нарастващ ред.
+
+|Вход|Изход|
+|---|---|
+|1 2 3 0 0 0 6 7 8 8 8 -3 -2 -1 0|8|
+|1 1 1 1 1 1 1 1 1 1 1 1 1 1 1|15|
+|1 2 3 4 5 6 7 8 9 10 11 12 13 14 15|15|
+|4 -4 4 -4 4 -4 4 -4 4 -4 4 -4 4 -4 4|2|
+|15 14 13 12 11 10 9 8 7 6 5 4 3 2 1|1|
+|-539 -118 -431 53 -151 -151 -82 -40 640 -47 347 -50 -100 -198 984|5|
+
+### Задача 7
+
+От входата получавате цяло неотрицателно число.
+Върнете дали то е перфектно: дали е равно на сумата на всички свои делители, освен себе си.
+
+|Вход|Изход|
+|---|---|
+|6|Perfect|
+|7|Not perfect|
+|1337|Not perfect|
+|27|Not perfect|
+|28|Perfect|
+|29|Not perfect|
+|33550336|Perfect|
+|496|Perfect|
+|42|Not perfect|
+|8128|Perfect|
+
+### Задача 8
+
+От входа получавате две редици от по 10 реални числа (т.е. първите 10 числа са от първата редица, и вторите 10 числа образуват втората редица).
+След това получавате знак - аритметича операция (`+`, `-`, `*`, `/`).
+
+Трябва да изпълните операцията върху всяка съответна двойка числа от двете редици и да върнете резултатите.
+
+|Вход|Изход|
+|---|---|
+|1 2 3 4 5 6 7 8 9 10<br>
+ 1 2 3 4 5 6 7 8 9 10<br>
+ +|
+|2 4 6 8 10 12 14 16 18 20|
+|4.5 -16 194.1 919.01 1000.11 -27 12 444 71 0<br>
+ 0 8 12 56 10 0 3 14 1 0<br>
+ /|
+|inf -2 16.175 16.41 100.011 -inf 4 31.714 71 -nan|
+
+### Задача 9
+
+От входа получавате реално число z между 0 (изключително) и 2 (включително), заедно с дължина n.
+
+Трябва да намерите стойността на логаритъм с основа &escr; ([Неперово число](https://en.wikipedia.org/wiki/E_%28mathematical_constant%29)) от това число, използвайки развитието по ред на Тейлър:
+
+![](https://syndamia.com/teaching/upp-2025/week05/img/ln_taylor_series.png)
+
+като n определя колко елемента от реда да използвате.
+
+|Вход|Изход|
+|---|---|
+|1 1|0|
+|1.5 1|0.5|
+|1.5 3|0.416667|
+|1.5 9|0.405532|
+|1.5 20|0.405465|
+|0.5 1|-0.5|
+|0.5 5|-0.688542|
+|0.5 20|-0.693147|
+|0.01 20|-3.40687|
+|0.01 900|-4.60516|
+|0.01 1000|-4.60517|
+
+### Задача 10
+
+От входа получавате цяло неотрицатено число с максимум 8 цифри.
+Това число представлява сериен номер под [S10 стандарта за идентификационни номера на пратки](https://en.wikipedia.org/wiki/S10_%28UPU_standard%29).
+
+Трябва да пресметнете "контролната цифра" (check digit) на серийния номер.
+Това става по следния начин:
+.numbered
+1. От ляво на дясно, трябва да умножите всяка цифра със съответната си "тежест": 8, 6, 4, 2, 3, 5, 9, 7
+2. Сумирате умножените цифри
+3. Пресмятате контролната цифра по формулата: `11 - <сума> mod 11`, където
+ ако резултата е 10, цифрата е 0 и ако резултата е 11, цифрата е 5.
+
+|Вход|Изход|
+|---|---|
+|0|5|
+|1|4|
+|2|8|
+|8|0|
+|47312482|9|
+|87654321|6|
+|37153644|4|
+|30159181|5|
+
+### Задача 11
+
+От входа получавате цяло неотрицателно число.
+
+Изкарвате [числото на Лукас](https://en.wikipedia.org/wiki/Lucas_number) след толкова на брой позиции и ако числото =[не]= е било 0, приемаме ново число и повтаряте логиката.
+
+Тоест, ако първото число е n, тогава връщате `n`-тото число на Лукас.\n
+Ако второто число е m, тогава връщате `n + m`-тото число на Лукас.
+И така нататък.
+
+Числата на Лукас се определят по следния начин:
+
+![](https://syndamia.com/teaching/upp-2025/week05/img/lucas_def.png)
+
+*[Вашия вход и изход може да са смесени!]*
+
+|Вход|Изход|
+|---|---|
+|0|2|
+|1 0|1 1|
+|2 0|3 3|
+|5 0|11 11|
+|2 3 0|3 11 11|
+|8 8 1 0|47 2207 3571 3571|
+
+### Задача 12
+
+От входа получавате 20 цели числа, всяко от които е индекс на елемент в масива (т.е. всяко е между 0 и 19 включително).
+
+Започвайки от първия елемент, вземате числената му стойност като индекс и "отивате" на тази позиция в масива.
+Аналогично, за текущия елемент, вземате числената стойност и индексирате.
+Така продължавате, докато не стигнете до последния елемент, когато алгоритъма спира.
+
+Целта е да преброите колко пъти "скачате" между различни числа и да изкарате тази бройка.
+
+Ако се поражда цикъл (посетим някое число повече от един път), тогава трябва да изкарате "Infinity".
+
+|Вход|Изход|
+|---|---|
+|1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 0|19|
+|19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0|1|
+|1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0|Infinity|
+|5 3 18 19 12 2 7 14 17 16 19 13 11 6 9 19 3 1 8 1|8|
+|4 3 18 9 12 2 7 14 17 16 19 13 11 6 9 19 3 1 8 1|Infinity|
+
+## За самоподготовка
+
+### Задача 13
+
+От входа получавате 8 цели числа.
+След това получавате 9то цяло число.
+
+Трябва да върнете, сред 8те цели числа, колко често се среща 9тото.
+
+|Вход|Изход|
+|---|---|
+|1 2 3 4 5 6 7 8 9|0|
+|1 2 1 -3 2 -4 3 5 1|2|
+|8 1 7 8 8 1 7 -3 8|3|
+|0 0 0 0 0 0 0 0 0|8|
+
+### Задача 14
+
+От входа получавате 16 цели числа.
+Трябва да изкарате, на два реда, първо всички четни числа и после всички нечетни.
+
+|Вход|Изход|
+|---|---|
+|1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16|2 4 6 8 10 12 14 16<br>1 3 5 7 9 11 13 15|
+|-961 -46 86 871 657 96 -40 -297 -754 468 -5 662 -9 -392 82 255|
+|-46 86 96 -40 -754 468 662 -392 82<br>
+ -961 871 657 -297 -5 -9 255|
+
+### Задача 15
+
+От входа получавате 12 реални числа.
+Трябва да върнете, на отделни редове, двойки числа от тази поредица:
+.bulleted
+- Първата двойка числа съдържа първото и последното число.
+- Втората двойка има второто и пред-посленото число.
+- И така нататък.
+
+|Вход|Изход|
+|---|---|
+|1 2 3 4 5 6 7 8 9 10 11 12|
+|1 12<br>
+ 2 11<br>
+ 3 10<br>
+ 4 9<br>
+ 5 8<br>
+ 6 7|
+|419.8 124.01 -47 915.5 31.99 769.89 505 58 -568.5 547.77 899.192 52|
+|419.8 52<br>
+ 124.01 899.192<br>
+ -47 547.77<br>
+ 915.5 -568.5<br>
+ 31.99 58<br>
+ 769.89 505|
+
+### Задача 16
+
+От входа получавате две редици от по 5 цели числа (т.е. първите 5 числа са част от първата редица и вторите 5 числа са част от втората).
+
+Трябва да изкарате една редица от числа, където двете редици са преплетени: първо имаме първото число от първата редица, след това първото число от втората редица, след това второто число от първата редица и така нататък.
+
+|Вход|Изход|
+|---|---|
+|1 2 3 4 5 6 7 8 9 10|1 6 2 7 3 8 4 9 5 10|
+|0 1 0 1 0 1 0 1 0 1|0 1 1 0 0 1 1 0 0 1|
+
+### Задача 17
+
+От входа получавате цяло число в десетична бройна система.
+
+Трябва да изкарате дали то е [число на Армстронг](https://en.wikipedia.org/wiki/Narcissistic_number): число, което е равно на сумата на цифрите си, където всяка цифра е повдигната на степен, дължината на числото.
+
+|Вход|Изход|
+|---|---|
+|153|Narcissistic|
+|5|Narcissistic|
+|0|Narcissistic|
+|10|Not narcissistic|
+|407|Narcissistic|
+|54748|Narcissistic|
+
+### Задача 18
+
+От входа получавате 7 цели числа.
+
+Трябва да намерите индекса на равновесие: позиция сред числата, такава че сумата от първото число до индекса - 1 е равна на сумата на числата от индекса + 1 до последното число.
+
+Ако такаъв индекс не съществува, изкарате "No such index".
+
+|Вход|Изход|
+|---|---|
+|-7 1 5 2 -4 3 0|3|
+|5 5 4 2 1 3 8|No such index|
+
+### Задача 19
+
+От входа получавате две числа: реален ъгъл в радиани x и положителен максимален индекс n.
+
+Трябва да върнете стойността на синус от този ъгъл, използвайки реда на Тейлър:
+
+![](https://syndamia.com/teaching/upp-2025/week05/img/sinx_taylor_series.png)
+
+където n определя с колко елемента от реда да смятаме.
+
+|Вход|Изход|
+|---|---|
+|0 1|0|
+|0.52359 15|0.499992|
+|1.57079 15|0.998356|
+|4.71238 5|-1.08189|
+
+### Задача 20
+
+От входа получавате цяло положително число.
+Трябва да валидирате това число използвайки [алгоритъма на Luhn](https://en.wikipedia.org/wiki/Luhn_algorithm):
+.numbered
+1. Най-дясната цифра е "цифра за проверка", тя трябва да бъде изкарана за после.
+2. Започвайки от най-дясната цифра (от останалите цифри, т.е. втората най-дясна в числото),
+ трябва да умножите всяка втора цифра по две.
+ Ако цифрата стане по-голяма от 9, трябва да *[извадите]* 9.
+3. Сумирате всички цифри (всички умножени и неумножени).
+4. Проверявате дали цифрата за проверка е равна на `(10 - (сумa mod 10)) mod 10`
+
+Този алгоритъм се използва главно в проверката на номера на дебитни/кредитни карти.
+Главната цел е да се засекат някои механични грешки при въвеждане на номера.
+
+|Вход|Изход|
+|---|---|
+|0|Valid|
+|1|Invalid|
+|1156|Valid|
+|1337|Invalid|
+|12345674|Valid|
+|13245674|Invalid|
+
+### Задача 21
+
+От входа получавате цяло неотрицателно число.
+Трябва да върнете съответното по индекс [число на Каталан](https://en.wikipedia.org/wiki/Catalan_number).
+
+n-тото число на Каталан се дефинира по следния начин:
+
+![](https://syndamia.com/teaching/upp-2025/week05/img/catalan_def.png)
+
+Където `x!` е [факториел](https://en.wikipedia.org/wiki/Factorial#Definition) от x.
+Припомняме, че факториел на едно число е умножението на всички цели числа от 1 до самото число включително.
+
+|Вход|Изход|
+|---|---|
+|0|1|
+|1|1|
+|2|2|
+|5|42|
+|9|4862|