🧑🏫 Практика#
Задачи, которые решаем на занятиях.
Задача 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;), а не с нуля — иначе функция ошибётся на отрицательных числах.