Последовательность Recamán определяется следующим образом:
или в псевдокоде:
a(0) = 0,
if (a(n - 1) - n) > 0 and it is not
already included in the sequence,
a(n) = a(n - 1) - n
else
a(n) = a(n - 1) + n.
Первые цифры ( OEIS A005132 ):
0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11, 22, 10, 23, 9, 24, 8, 25, 43, 62, 42, 63, 41, 18, 42
Если вы изучите эту последовательность, вы заметите, что есть дубликаты, например a(20) = a(24) = 42
(с 0 индексами). Мы назовем номер дубликатом, если в последовательности есть хотя бы один идентичный номер.
Вызов:
Возьмите целочисленный ввод k и выведите либо первые k повторяющихся чисел в том порядке, в котором они были найдены как дубликаты в последовательности Рекамана, либо только k - тое число.
Это первые дублированные номера:
42, 43, 78, 79, 153, 154, 155, 156, 157, 152, 265, 261, 262, 135, 136, 269, 453, 454, 257, 258, 259, 260, 261, 262
Несколько вещей, на которые стоит обратить внимание:
- a (n) не считается дубликатом, если в a (0) ... a (n-1) нет идентичных чисел , даже если a (n + m) == a (n) .
- 42 будет до 43, так как его дубликат встречается до 43 дубликата
- Последовательность не отсортирована
- В этой последовательности также есть повторяющиеся элементы. Например, 12-е и 23-е числа оба 262 (0-проиндексированы).
Контрольные примеры (0-индексированные)
k Output
0 42
9 152
12 262
23 262
944 5197
945 10023
10000 62114
Это код-гольф , поэтому выигрывает самый короткий код на каждом языке!
Пояснения приветствуются!
43
выводится раньше 42
? Он появляется первым в последовательности Recamán. Ты имеешь в виду, что сначала выводится тот, который впервые обнаружил дубликат?