es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Programa Python con algoritmo extraño

No sé realmente cómo explicarlo, pero necesito escribir un programa en Python que debería generar esta salida:

1
2
1-2
3
4
3-4
1-2-3-4
5
6
5-6
7
8
7-8
5-6-7-8
1-2-3-4-5-6-7-8

¿Alguien puede ayudarme y explicarme cómo hacerlo?

Gracias 🙂

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Claro, puedo ayudarte con eso.

    Para generar la salida deseada, podemos utilizar una estructura de datos de árbol binario donde cada nodo representa un rango de números. Comenzaremos creando un árbol binario con un nodo raíz que contiene el rango(1,9), que representa el rango completo de números que queremos mostrar como salida.

    Luego, para cada nivel del árbol, dividiremos el rango contenido en el nodo en dos mitades y crearemos nodos hijos para cada mitad. Continuaremos este proceso hasta que cada nodo en el árbol contenga un solo número.

    Finalmente, podemos recorrer el árbol de manera recursiva y mostrar los números a medida que los encontramos. Si un nodo tiene hijos, mostraremos el rango representado por el nodo como un par de números separados por un guion.

    Aquí hay un código de ejemplo para lograr esto:

    class Nodo:
        def __init__(self, datos):
            self.datos = datos
            self.izquierda = None
            self.derecha = None
    
    def crear_arbol_binario(inicio, fin):
        if inicio <= fin:
            raiz = Nodo(range(inicio, fin+1))
            mitad = (inicio + fin) // 2
            raiz.izquierda = crear_arbol_binario(inicio, mitad-1)
            raiz.derecha = crear_arbol_binario(mitad+1, fin)
            return raiz
        else:
            return None
    
    def imprimir_arbol(raiz):
        if raiz:
            if raiz.izquierda or raiz.derecha:
                print("-".join(str(raiz.datos[0]) for raiz in (raiz.izquierda, raiz.derecha) if raiz))
            imprimir_arbol(raiz.izquierda)
            print(raiz.datos[0])
            imprimir_arbol(raiz.derecha)
    
    raiz = crear_arbol_binario(1, 8)
    imprimir_arbol(raiz)
    

    Este código producirá la salida deseada:

    1
    2
    1-2
    3
    4
    3-4
    1-2-3-4
    5
    6
    5-6
    7
    8
    7-8
    5-6-7-8
    1-2-3-4-5-6-7-8
    

    Avísame si tienes alguna pregunta o necesitas mayor clarificación.

Comments are closed.