Antiguo Wei gana la oferta que le llevará a conocer --- serie de cepillo del título (46. El juego de niño (círculo último número restante))

Juego de 46. Niño (círculo último número restante)

problema:

día de los niños cada año, vaca-off prepararán algunos pequeños regalos para visitar a los niños del orfanato, este año también es cierto. Como un veterano de HF ganado, naturalmente, hemos preparado algunos juegos. Entre ellos, hay un juego de la siguiente manera: En primer lugar, que los niños rodeadas por un círculo grande. A continuación, asigna aleatoriamente un número m, de manera que el número de niños 0 Número poniendo. Llorado cada vez m-1 los niños cantan una canción a estar fuera de la línea, entonces cualquiera de las cajas de regalo en la elección de un regalo, y no regresar al círculo, empezando por su próximo hijo, continúe 0 ... m-1 contando ... continuar ... hasta que el último hijo restante, no se puede llevar a cabo, y obtener el ganado fuera del "Detective Conan" rara edición del colector (plazas limitadas oh! _ ). ¿Quieres probar siguiente, que los hijos recibirán los regalos que? (NOTA: El número de niños es de 0 a n-1)
si no hay niños, retorno -1

solución:

pensado:

Si sólo el último número de la ganadora, entonces podemos resolver el problema mediante la inducción matemática, en aras de la discusión, primera emisión ligeros cambios no afectan a la intención original:

Descripción del problema: n individuales (números del 0 ~ (n-1)), de 0 Countin, informe (m-1) de salida, la gente restante continuará contando fuera de cero. Buscando el número ganador.

Sabemos que la primera persona (número debe ser m% n-1) Después de quitar de la cola, los restantes n-1 para formar un nuevo Josefo individuo (en número de k = m% n comenzaron)

k k + 1 k + 2 ... n-2, n-1, 0, 1, 2, ... k-2 y k empieza desde 0 paquetes.

Sólo tenemos que empezar cada vez que en esta posición, vuelva a encontrar los primeros elementos de m-1 pueden ser.

código Python:

# -*- coding:utf-8 -*-
from collections import deque
class Solution:
    def LastRemaining_Solution(self, n, m):
        # write code here
        if not n:
            return -1
        res=range(n)
        i=0
        while len(res)>1:
            i=(i+m-1)%len(res)   #从i开始第m-1元素
            res.pop(i)
        return res.pop()
Publicados 160 artículos originales · elogios ganado 30 · Vistas a 70000 +

Supongo que te gusta

Origin blog.csdn.net/yixieling4397/article/details/105064563
Recomendado
Clasificación