Задачи - УПП, Седмица 5, 30.10.2025

GitHub Classroom: https://classroom.github.com/a/6oPRMxJx

warn Имайте предвид, че не всички задачи се решават с масиви!

За решаване

Задача 1

От входа получавате 10 реални числа. Трябва да ги върнете в обратен ред.

ВходИзход
1 2 3 4 5 6 7 8 9 1010 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 ge f g a b c d
k l m l j l bj l b k l m l

Задача 3

От входа получавате 14 цели неотрицателни числа. Трябва да изкарате второто най-голямо число. Ако няма такова, просто изкарайте най-голямото.

ВходИзход
1 2 3 4 5 6 7 8 9 10 11 12 13 1413
505 19 899 0 232 61 546 6 65 259 55 389 326 760760
9 9 9 9 9 9 9 9 9 9 9 9 9 99

Задача 4

От входа получавате две цели положителни числа. Трябва да върнете факториел от първото число, който факториел е повдигнат на степен второто число.

Факториел на едно (неотрицателно цяло) число е умножението на всички цели числа от 1 до самото число включително. Примерно, факториел от 5 е 1 * 2 * 3 * 4 * 5 = 120.

ВходИзход
5 1120
5 214400
3 646656
4 313824
1 1831
2 8256

Задача 5

От входа получавате 18 цели числа. Трябва да изкарате същата поредица числа, обаче всички нули са в началото на редицата.

ВходИзход
1 0 0 2 3 4 0 5 0 6 0 0 0 7 8 0 9 00 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 цели числа. Трябва да изкарате дължината на най-дългата последователност от числа, която е подредена в нарастващ ред.

Последователност от числа, която съдържа еднакви числа, също се зачита за сортирана в нарастващ ред.

(01.11.2025) Поправен е изхода в първия пример, от 6 на 8.
ВходИзход
1 2 3 0 0 0 6 7 8 8 8 -3 -2 -1 08
1 1 1 1 1 1 1 1 1 1 1 1 1 1 115
1 2 3 4 5 6 7 8 9 10 11 12 13 14 1515
4 -4 4 -4 4 -4 4 -4 4 -4 4 -4 4 -4 42
15 14 13 12 11 10 9 8 7 6 5 4 3 2 11
-539 -118 -431 53 -151 -151 -82 -40 640 -47 347 -50 -100 -198 9845

Задача 7

От входата получавате цяло неотрицателно число. Върнете дали то е перфектно: дали е равно на сумата на всички свои делители, освен себе си.

ВходИзход
6Perfect
7Not perfect
1337Not perfect
27Not perfect
28Perfect
29Not perfect
33550336Perfect
496Perfect
42Not perfect
8128Perfect

Задача 8

От входа получавате две редици от по 10 реални числа (т.е. първите 10 числа са от първата редица, и вторите 10 числа образуват втората редица). След това получавате знак - аритметича операция (+, -, *, /).

Трябва да изпълните операцията върху всяка съответна двойка числа от двете редици и да върнете резултатите.

ВходИзход
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
+
2 4 6 8 10 12 14 16 18 20
4.5 -16 194.1 919.01 1000.11 -27 12 444 71 0
0 8 12 56 10 0 3 14 1 0
/
inf -2 16.175 16.41 100.011 -inf 4 31.714 71 -nan

Задача 9

От входа получавате реално число z между 0 (изключително) и 2 (включително), заедно с дължина n.

Трябва да намерите стойността на логаритъм с основа ℯ (Неперово число) от това число, използвайки развитието по ред на Тейлър:

./img/ln_taylor_series.png

като n определя колко елемента от реда да използвате.

ВходИзход
1 10
1.5 10.5
1.5 30.416667
1.5 90.405532
1.5 200.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 стандарта за идентификационни номера на пратки.

Трябва да пресметнете "контролната цифра" (check digit) на серийния номер. Това става по следния начин:

  1. От ляво на дясно, трябва да умножите всяка цифра със съответната си "тежест": 8, 6, 4, 2, 3, 5, 9, 7
  2. Сумирате умножените цифри
  3. Пресмятате контролната цифра по формулата: 11 - <сума> mod 11, където ако резултата е 10, цифрата е 0 и ако резултата е 11, цифрата е 5.

ВходИзход
05
14
28
80
473124829
876543216
371536444
301591815

Задача 11

От входа получавате цяло неотрицателно число.

Изкарвате числото на Лукас след толкова на брой позиции и ако числото не е било 0, приемаме ново число и повтаряте логиката.

Тоест, ако първото число е n, тогава връщате n-тото число на Лукас.
Ако второто число е m, тогава връщате n + m-тото число на Лукас. И така нататък.

Числата на Лукас се определят по следния начин:

./img/lucas_def.png

(01.11.2025) Входа на последния пример е поправен.

Вашия вход и изход може да са смесени!

ВходИзход
02
1 01 1
2 03 3
5 011 11
2 3 03 11 11
8 8 1 047 2207 3571 3571

Задача 12

От входа получавате 20 цели числа, всяко от които е индекс на елемент в масива (т.е. всяко е между 0 и 19 включително).

Започвайки от първия елемент, вземате числената му стойност като индекс и "отивате" на тази позиция в масива. Аналогично, за текущия елемент, вземате числената стойност и индексирате. Така продължавате, докато не стигнете до последния елемент, когато алгоритъма спира.

Целта е да преброите колко пъти "скачате" между различни числа и да изкарате тази бройка.

Ако се поражда цикъл (посетим някое число повече от един път), тогава трябва да изкарате "Infinity".

(01.11.2025) Входа на първия пример е поправен.
ВходИзход
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 019
19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0Infinity
5 3 18 19 12 2 7 14 17 16 19 13 11 6 9 19 3 1 8 18
4 3 18 9 12 2 7 14 17 16 19 13 11 6 9 19 3 1 8 1Infinity

За самоподготовка

Задача 13

От входа получавате 8 цели числа. След това получавате 9то цяло число.

Трябва да върнете, сред 8те цели числа, колко често се среща 9тото.

ВходИзход
1 2 3 4 5 6 7 8 90
1 2 1 -3 2 -4 3 5 12
8 1 7 8 8 1 7 -3 83
0 0 0 0 0 0 0 0 08

Задача 14

От входа получавате 16 цели числа. Трябва да изкарате, на два реда, първо всички четни числа и после всички нечетни.

ВходИзход
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 162 4 6 8 10 12 14 16
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
-961 871 657 -297 -5 -9 255

Задача 15

От входа получавате 12 реални числа. Трябва да върнете, на отделни редове, двойки числа от тази поредица:

ВходИзход
1 2 3 4 5 6 7 8 9 10 11 12 1 12
2 11
3 10
4 9
5 8
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
124.01 899.192
-47 547.77
915.5 -568.5
31.99 58
769.89 505

Задача 16

От входа получавате две редици от по 5 цели числа (т.е. първите 5 числа са част от първата редица и вторите 5 числа са част от втората).

Трябва да изкарате една редица от числа, където двете редици са преплетени: първо имаме първото число от първата редица, след това първото число от втората редица, след това второто число от първата редица и така нататък.

ВходИзход
1 2 3 4 5 6 7 8 9 101 6 2 7 3 8 4 9 5 10
0 1 0 1 0 1 0 1 0 10 1 1 0 0 1 1 0 0 1

Задача 17

От входа получавате цяло число в десетична бройна система.

Трябва да изкарате дали то е число на Армстронг: число, което е равно на сумата на цифрите си, където всяка цифра е повдигната на степен, дължината на числото.

ВходИзход
153Narcissistic
5Narcissistic
0Narcissistic
10Not narcissistic
407Narcissistic
54748Narcissistic

Задача 18

(01.11.2025) Поправени бройката на входните цели числа и втория пример.

От входа получавате 7 цели числа.

Трябва да намерите индекса на равновесие: позиция сред числата, такава че сумата от първото число до индекса - 1 е равна на сумата на числата от индекса + 1 до последното число.

Ако такаъв индекс не съществува, изкарате "No such index".

ВходИзход
-7 1 5 2 -4 3 03
5 5 4 2 1 3 8No such index

Задача 19

От входа получавате две числа: реален ъгъл в радиани x и положителен максимален индекс n.

Трябва да върнете стойността на синус от този ъгъл, използвайки реда на Тейлър:

./img/sinx_taylor_series.png

където n определя с колко елемента от реда да смятаме.

ВходИзход
0 10
0.52359 150.499992
1.57079 150.998356
4.71238 5-1.08189

Задача 20

От входа получавате цяло положително число. Трябва да валидирате това число използвайки алгоритъма на Luhn:

  1. Най-дясната цифра е "цифра за проверка", тя трябва да бъде изкарана за после.
  2. Започвайки от най-дясната цифра (от останалите цифри, т.е. втората най-дясна в числото), трябва да умножите всяка втора цифра по две. Ако цифрата стане по-голяма от 9, трябва да извадите 9.
  3. Сумирате всички цифри (всички умножени и неумножени).
  4. Проверявате дали цифрата за проверка е равна на (10 - (сумa mod 10)) mod 10

Този алгоритъм се използва главно в проверката на номера на дебитни/кредитни карти. Главната цел е да се засекат някои механични грешки при въвеждане на номера.

(01.11.2025) Поправен е входа на третия пример.
ВходИзход
0Valid
1Invalid
1156Valid
1337Invalid
12345674Valid
13245674Invalid

Задача 21

От входа получавате цяло неотрицателно число. Трябва да върнете съответното по индекс число на Каталан.

n-тото число на Каталан се дефинира по следния начин:

./img/catalan_def.png

Където x! е факториел от x. Припомняме, че факториел на едно число е умножението на всички цели числа от 1 до самото число включително.

ВходИзход
01
11
22
542
94862