Задача 5922. Источник: Поляков. Задание КИМ 16
(Е. Джобс) Алгоритм вычисления функции F(n), где n – неотрицательное число, задан следующими соотношениями:
F(n) = n, при n ≤ 10
F(n) = 1, при n ≥ 10000
F(n) = n % 10 + F(n+2), при 10 < n < 10000 и четном n,
F(n) = F(n–2) – (n–1) % 10, при 10 < n < 10000 и нечетном n.
Чему равно значение выражения F(4500) + F(5515)? В ответе запишите только целое число. Примечание: операция a % b находит остаток от деления числа a на число b.
Решение
В данной задаче четные элементы зависят от следующего четного элемента, а нечетные элементы зависят от предыдущего нечетного элемента. Поэтому для каждой формулы делаем свой цикл для вычисления, занося результаты в список или массив.
Python
f = [1] * 10001
for n in range(11):
f[n] = n
for n in range(9998, 11, -2):
f[n] = n % 10 + f[n + 2]
for n in range(11, 5516, 2):
f[n] = f[n - 2] - (n - 1) % 10
print(f[4500] + f[5515])
PascalABC
var
n: Integer;
f: array[0..10000] of Integer;
begin
f[10000] := 1;
for n := 0 to 10 do
f[n] := n;
for n := 9998 downto 12 do
if n mod 2 = 0 then
f[n] := n mod 10 + f[n + 2];
for n := 11 to 5515 do
if n mod 2 = 1 then
f[n] := f[n - 2] - (n - 1) mod 10;
Writeln(f[4500] + f[5515]);
end.
C++
#include <iostream>
using namespace std;
int main()
{
int f[10001];
f[10000] = 1;
for (int n = 0; n < 11; n++)
f[n] = n;
for (int n = 9998; n > 11; n -= 2)
f[n] = n % 10 + f[n + 2];
for (int n = 11; n < 5516; n += 2)
f[n] = f[n - 2] - (n - 1) % 10;
cout << f[4500] + f[5515];
}
Ответ
4