Задача
МакКарти — известный теоретик компьютерных наук. В одной из своих работ он определил рекурсивную функцию $f_{91}$, которая определена для всякого натурального числа $n$ следующим образом:
Если $n\leqslant100$, то $f_{91}\left(n\right) = f_{91}\left(f_{91}\left(n+11\right)\right)$;
Если $n\geqslant101$, то $f_{91}\left(n\right) = n-10$.
Входные данные
Натуральное число $n$, не большее $1000000$.
Выходные данные
Значение $f_{91}\left(n\right)$.
Тесты
№ | ВХОДНЫЕ ДАННЫЕ | ВЫХОДНЫЕ ДАННЫЕ |
1 | 5 | 91 |
2 | 27 | 91 |
3 | 91 | 91 |
4 | 100 | 91 |
5 | 102 | 92 |
6 | 180 | 170 |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Main{ public static long func(long n){ if(n <= 100){ return 91; } else { return n - 10; } } public static void main (String[] args){ java.util.Scanner in = new java.util.Scanner(System.in); long num = in.nextInt(); System.out.println(func(num)); } } |
Решение
Для решения задачи создадим функцию $f_{91}\left(n\right)$ которая в зависимости от значения $n$ будет выдавать нам разные значение, а имеено:
если $n\leqslant100$, то $f_{91}\left(n\right) = f_{91}\left(f_{91}\left(n+11\right)\right)$;
если $n\geqslant101$, то $f_{91}\left(n\right) = n-10$.
Так же, мы можем проследить законномерность того, что если $n\leqslant100$ функция $f_{91}\left(n\right)$ будет выдавть $91$, заметив это можно будет заменить сложную, но при этом красивую рекурсивную функцию на более простое и практичное решение и получить следущие соотношение:
$f_{91}\left(n\right) = \begin{cases} 91, & n\leqslant100;\\\ n-10, & n\geqslant101; \end{cases}$