La secuencia de Recamán se define de la siguiente manera:
o en seudocó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.
Los primeros números son ( 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
Si estudia esta secuencia, notará que hay duplicados, por ejemplo a(20) = a(24) = 42(0 indexados). Llamaremos a un número un duplicado si hay al menos un número idéntico delante de él en la secuencia.
Desafío:
Tome una entrada entera k , y genere los primeros k números duplicados en el orden en que se encuentran como duplicados en la secuencia de Recamán, o solo el número k '.
Estos primeros números duplicados son:
42, 43, 78, 79, 153, 154, 155, 156, 157, 152, 265, 261, 262, 135, 136, 269, 453, 454, 257, 258, 259, 260, 261, 262
Algunas cosas a tener en cuenta:
- a (n) no cuenta como duplicado si no hay números idénticos en a (0) ... a (n-1) , incluso si a (n + m) == a (n) .
- 42 será antes de 43, ya que su duplicado ocurre antes del duplicado de 43
- La secuencia no está ordenada.
- También hay elementos duplicados en esta secuencia. Por ejemplo, los números 12 y 23 son 262 (indexados en 0).
Casos de prueba (0 indexados)
k Output
0 42
9 152
12 262
23 262
944 5197
945 10023
10000 62114
Este es el código de golf , por lo que gana el código más corto en cada idioma.
¡Se alientan las explicaciones!
43emite antes 42? Aparece primero en la secuencia de Recamán. ¿Te refieres a la salida primero, la primera que se encuentra duplicada?