Задачи - УПП, Седмица 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 цели числа. Трябва да изкарате дължината на най-дългата последователност от числа, която е подредена в нарастващ ред.

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

ВходИзход
1 2 3 0 0 0 6 7 8 8 8 -3 -2 -1 06
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

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

ВходИзход
02
1 01 1
2 03 3
5 011 11
2 3 03 11 11
8 16 17 047 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 020
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

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

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

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

ВходИзход
-7 1 5 2 -4 3 03
5 5 4 2 1 3 8 0No 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

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

ВходИзход
0Valid
1Invalid
1151Valid
1337Invalid
12345674Valid
13245674Invalid

Задача 21

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

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

./img/catalan_def.png

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

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