Python - problema de colas

 
Vista:

problema de colas

Publicado por ariel (1 intervención) el 16/04/2020 00:54:42
Hola:
LLevo tiempo en un problema y no he podido dar con la soluciòn. Alguien me podìa ayudar por favor:

PROBLEMA:

"100 niños, numerados del 1 al 100 participan de un juego en cırculo. Partiendo desde el numero 4, se
elimina a cada cuarto nino (es decir, al 4, 8, 12, etc) sacandolo del cırculo. Una vez alcanzado el ´ultimo,
se repite el proceso con los ninos restantes, eliminando a cada cuarto nino hasta que quede solo uno.
¿Cual nino gana el juego? Implemente una solucion con Colas para adivinar."

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

problema de colas

Publicado por tincopasan (1082 intervenciones) el 16/04/2020 12:12:00
hola:
1
LLevo tiempo en un problema y no he podido dar con la soluciòn
que curioso que llevando tiempo no hayas puesto ni un intento de solución.
Colas no es otra cosa más que listas por así decirlo, así que esto es python en la forma más básica.
Supongo que como el enunciado no lo dice no es necesario ni clases ni nodos.
Por lógica no puede haber un solo ganador, ya que en algún momento van a quedar 3 niños ¿cómo sacas del juego al 4?Sería ilógico solo declarar un ganador si quedan 3
Si realizas el proceso o script ya no estás adivinando, para adivinar habría que utilizar un método random. He visto malos planteos y este,claro que eso no es culpa tuya, en fin como es tan simple y por la cuarentena me distraigo con estas cosas.
No es el mejor ni el más efectivo, es el más básico.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#-*- coding: utf -8 -*-
circulo=[x for x in range(1,101)]  #método 1
 
circulo1= []                                    #método 2
for niño in range(100,0, -1):
     circulo1.insert(0,niño)             #usando insert para ser más purista de las colas
 
circulo2 =[]                                     #método 3
for niño in range(1,101):              #todo esto es  como el método 1 pero más gráfico
     circulo2.append(niño)             #usando append ya que una cola no es otra cosa más que una lista.
 
print(circulo)
print(circulo1)
print(circulo2)
 
# hasta acá creamos la cola
 
lugar = 3  #es así porque el indice comienza en 0 no en 1 uso la que cree con el método 1 pero es indistinto.
while  len(circulo) > 3:        #en algún momento quedarán solo 3 niños, no hay forma de eliminar al  cuarto
     if lugar <= len(circulo):
          faltan = len(circulo) - lugar
          if faltan >0:
               niño= circulo.pop(lugar)
               print("Se eliminó el lugar: ",niño)
               faltan = len(circulo) - lugar
               if faltan > 3:
                    lugar +=3
               else  :
                    lugar = 3 - faltan
          elif faltan == 0:
              lugar=3
 
print("Los lugares ganadores:  ",circulo)
Obvio que modificando el valor de range pones los niños que quieras en el juego
Puede haber algún error u omisión, si lo hay corregilo.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-2
Comentar