JustCaptain kod-buduschego
7efceb421dbc5c7b77700ed9dbec228ce6d15358
Перейти к файлу
Код
Практика.md

🧑🏫 Практика#

Задачи, которые решаем на занятиях.


Задача 1. Сумма цифр числа#

Условие#

Дано натуральное число n. Найдите сумму его цифр, используя рекурсивную функцию int sumDigits(int n).

Входные данные#

Одно натуральное число n.

Выходные данные#

Одно число — сумма цифр.

Примеры#

Ввод:

1234

Вывод:

10

Ввод:

507

Вывод:

12

Заметка

База рекурсии — однозначное число (n < 10): сумма его цифр равна ему самому. Рекурсивный шаг — последняя цифра n % 10 плюс сумма цифр числа без неё sumDigits(n / 10).

sumDigits(1234) = 4 + sumDigits(123)
                = 4 + 3 + sumDigits(12)
                = 4 + 3 + 2 + sumDigits(1)
                = 4 + 3 + 2 + 1 = 10

Задача 2. Простые близнецы#

Условие#

Даны два натуральных числа. Напишите функцию bool isPrime(int n), которая определяет, является ли число простым. С её помощью определите, являются ли данные числа простыми близнецами — простыми числами, которые отличаются на 2.

Входные данные#

Два натуральных числа через пробел.

Выходные данные#

YES, если числа — простые близнецы, иначе NO.

Примеры#

Ввод:

17 19

Вывод:

YES

Ввод:

17 20

Вывод:

NO

Заметка

Числа 17 и 19 простые, и 19 − 17 = 2. Число 20 составное, поэтому во втором примере ответ NO. Не забудьте, что 0 и 1 простыми не являются, а делители достаточно проверять, пока i * i <= n.


Задача 3. Симметричное число#

Условие#

Напишите рекурсивную функцию int reverseNumber(int n), которая возвращает число, записанное теми же цифрами в обратном порядке. С её помощью определите, является ли число палиндромом.

Входные данные#

Одно натуральное число.

Выходные данные#

YES, если число — палиндром, иначе NO.

Примеры#

Ввод:

12321

Вывод:

YES

Ввод:

1231

Вывод:

NO

Совет

Удобно добавить второй параметр со значением по умолчанию: int reverseNumber(int n, int reversed = 0). На каждом шаге последняя цифра переносится в reversed: reverseNumber(n / 10, reversed * 10 + n % 10). База — n == 0, тогда ответ уже собран в reversed.


Задача 4. Наименьшее общее кратное#

Условие#

Напишите рекурсивную функцию int gcd(int a, int b) для НОД по алгоритму Евклида и функцию long long lcm(long long a, long long b), которая с её помощью вычисляет НОК двух чисел. Найдите НОК трёх чисел.

Входные данные#

Три натуральных числа, каждое не больше 1000.

Выходные данные#

Одно число — наименьшее общее кратное.

Пример#

Ввод:

4 6 10

Вывод:

60

Заметка

НОК выражается через НОД: lcm(a, b) = a * b / gcd(a, b). Для трёх чисел — lcm(lcm(a, b), c). Здесь lcm(4, 6) = 12, а lcm(12, 10) = 120 / 2 = 60. Произведение a * b быстро растёт, поэтому НОК считаем в long long.


Задача 5. Башни кубиков#

Условие#

Даны высоты трёх башен. Напишите функции int max3(int a, int b, int c) и int min3(int a, int b, int c) и с их помощью найдите разницу между самой высокой и самой низкой башней.

Входные данные#

Три целых числа через пробел.

Выходные данные#

Одно число — разница между максимумом и минимумом.

Пример#

Ввод:

18 25 13

Вывод:

12

Заметка

Самая высокая башня — 25, самая низкая — 13, разница 25 − 13 = 12. Внутри max3 и min3 начинайте с первого числа (int m = a;), а не с нуля — иначе функция ошибётся на отрицательных числах.