Processing math: 100%

6 votos

Juego en un círculo

N a los jugadores jugar a un juego. Están de pie en una manera tal que forman una regular N-gon. Los jugadores se numeran a partir de 1N. Los jugadores lanzar boomerangs en orden de las agujas del reloj, en los giros. En primer reproductor 1 lanza un boomerang, a través del centro del polígono. Si N es par, entonces el boomerang golpea al jugador en el lado opuesto, y el jugador que golpeó deja el juego. Si N es impar, a continuación, en el punto opuesto no tiene ningún jugador, por lo que el boomerang vuelve volando el jugador que tiró y le golpea, haciendo de él deje el juego. Después de que un jugador abandona el juego continúa con N1 jugadores en la misma manera (es decir, volvieron a hacer una regular (N1)-gon). El jugador que clockwisely más cercano al último jugador que se mueve, es el turno ahora.

El juego continúa hasta que sólo quede un jugador. Hay alguna forma cerrada de la expresión para el índice de un jugador ganador en términos de N?

Si f(m) denota la respuesta, entonces me di cuenta de un trivial de recursividad que f(2n+1)=f(2n)+1 ya que en el raro caso, el jugador 1 está en el primer movimiento y luego el jugador 2 se mueve. Pero nada para el caso. Gracias por la ayuda.

Primer par de valores: n --> f(n)

2 --> 1

3 --> 2

4 --> 4

5 --> 5

6 --> 1

7 --> 2

8 --> 3

9 --> 4

10 --> 5

11 --> 6

12 --> 8

13 --> 9

14 --> 11

15 --> 12

16 --> 14

1voto

Jonik Puntos 1041

Observando el patrón de nf(n) (al menos para n = 1 a 10000 en mi simulación) muestra que se mantiene constante, disminuye cada dos pasos, luego repite. Nos damos cuenta de la secuencia de 0,1,5,21,85,341,1365,5461, la cual es generada por a(k)=4k13,a(k+1)=4a(k)+1 Conjetura: Dado n, determinar el k tal que a(k)<na(k+1), entonces el ganador es:

f(n) = \begin{cases}n - a(k) \quad &\mbox{ for }a(k)+1\leq n \leq 2a(k)+1\\
n - a(k)+\lfloor{i/2}\rfloor \quad &\mbox{ for } 2a(k)+2 \leq n \leq a(k+1), n = 2a(k)+i
\end{casos}



#Python/SageMath code
def f(n):
  graphList = range(1,n+1); 
  playerIndex = 0
  while len(graphList)>1:
    if len(graphList)%2==0:
        currValue = graphList[playerIndex%len(graphList)]
        oppositeIndex = (len(graphList)/2+playerIndex)%len(graphList)
        del graphList[oppositeIndex]
        playerIndex = (graphList.index(currValue)+1)%len(graphList)
    else: del graphList[playerIndex]
return graphList[0]

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X