A sequência de Recamán é definida da seguinte forma:
ou no pseudo-código:
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.
Os primeiros números são ( 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
Se você estudar essa sequência, notará que existem duplicatas, por exemplo a(20) = a(24) = 42
(indexadas em 0). Chamaremos um número de duplicado se houver pelo menos um número idêntico na frente na sequência.
Desafio:
Pegue uma entrada inteira k e produza os primeiros k números duplicados na ordem em que são encontrados como duplicados na Sequência de Recamán ou apenas o k 'ésimo número.
Estes primeiros números duplicados são:
42, 43, 78, 79, 153, 154, 155, 156, 157, 152, 265, 261, 262, 135, 136, 269, 453, 454, 257, 258, 259, 260, 261, 262
Algumas coisas a serem observadas:
- a (n) não conta como duplicado se não houver números idênticos em a (0) ... a (n-1) , mesmo que a (n + m) == a (n) .
- 42 será anterior a 43, pois sua duplicata ocorre antes da duplicação de 43
- A sequência não está classificada
- Também existem elementos duplicados nesta sequência. Por exemplo, os números 12 e 23 são 262 (indexados 0).
Casos de teste (indexados 0)
k Output
0 42
9 152
12 262
23 262
944 5197
945 10023
10000 62114
Isso é código-golfe , então o código mais curto em cada idioma vence!
As explicações são incentivadas!
43
saída não é anterior 42
? Aparece primeiro na sequência de Recamán. Você quer dizer a saída primeiro da que se encontra duplicada?