TOPIC

Help me! Pls 10%

Mauricio Hernan asked 3 years ago

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <math.h>
typedef struct s_nodo {
    double numero;
    struct s_nodo * siguiente;
} t_nodo;
typedef struct s_cola {
    t_nodo * principio;
    t_nodo * final;
} t_cola;
t_cola cola;

double operacion (double, int);
void iniciar ();
bool colaVacia ();
void push (double);
void pop ();
bool buscar (double);
double pot (double, double);
int contar ();

typedef struct nodo2{
    double dato;
    struct nodo2 *izquierdo;
    struct nodo2 *derecho;
}tArbol;
typedef tArbol *pArbol;
pArbol arbol;

void crearArbol();
bool arbolVacio(pArbol);
void insertarNodoRecursivo(pArbol *, double);

int main () {
    double N, M;
    double casos;
    int i, pasos = 0;
    scanf ("%lf %lf", &N, &M);
    push (N);

    casos = 1;
    crearArbol();
    insertarNodoRecursivo(&arbol, N);

    while (!buscar (M)) {
        pasos++;

        for (i=0; i<casos; i++) {
            insertarNodoRecursivo (&arbol, operacion (cola.principio->numero, 1));
            insertarNodoRecursivo (&arbol, operacion (cola.principio->numero, 2));
            insertarNodoRecursivo (&arbol, operacion (cola.principio->numero, 3));
            insertarNodoRecursivo (&arbol, operacion (cola.principio->numero, 4));
            insertarNodoRecursivo (&arbol, operacion (cola.principio->numero, 5));
            insertarNodoRecursivo (&arbol, operacion (cola.principio->numero, 6));
            pop ();
        }
        casos = contar ();
    }
    printf ("%d\n", pasos);
    return 0;
}

Remember not post solutions. Your post may be reviewed by our moderators.

  • Mauricio Hernan replied 3 years ago

    bool buscar (double p_numero) {
        t_nodo * aux;
        aux = cola.principio;
        while (aux != NULL) {
            if (aux->numero == p_numero) {
                return true;
            }
            aux = aux->siguiente;
        }
        return false;
    }
    double pot (double num, double exp) {
        if (exp == 0) {
            return 1;
        } else {
            int i;
            double p = num;
            for (i=1; i<exp; i++) {
                num = num * p;
            }
            return num;
        }
    }
    
    void crearArbol(){
        arbol = NULL;
    }
    bool arbolVacio(pArbol p_arbol){
        if(p_arbol == NULL){
            return true;
        }else{
            return false;
        }
    }
    void insertarNodoRecursivo(pArbol *p_arbol, double dato){
        if(arbolVacio(*p_arbol)){
            (*p_arbol) = malloc (sizeof (tArbol));
            (*p_arbol)->dato = dato;
            (*p_arbol)->izquierdo = (*p_arbol)->derecho = NULL;
            push (dato);
        }else if(dato < (*p_arbol)->dato){
            insertarNodoRecursivo(&((*p_arbol)->izquierdo), dato);
        }else if(dato > (*p_arbol)->dato){
            insertarNodoRecursivo(&((*p_arbol)->derecho), dato);
        }
    }
    
    int contar () {
        int contador = 0;
        t_nodo * aux;
        aux = cola.principio;
        while (aux != NULL) {
            contador ++;
            aux= aux->siguiente;
        }
        return contador;
    }
  • Mauricio Hernan replied 3 years ago

    double operacion (double num, int op) {
        switch (op) {
            case 1: {
                num = num * 2;
                break;
            }
            case 2: {
                num = num * 3;
                break;
            }
            case 3: {
                num = floor(num / 2);
                break;
            }
            case 4: {
                num = floor(num / 3);
                break;
            }
            case 5: {
                num = num + 7;
                break;
            }
            case 6: {
                num = num - 7;
                break;
            }
        }
        return num;
    }
    void iniciar () {
        cola.principio = NULL;
        cola.final = NULL;
    }
    bool colaVacia () {
        if (cola.principio == NULL) {
            return true;
        } else {
            return false;
        }
    }
    void push (double p_numero) {
        t_nodo * nuevo;
        nuevo = malloc (sizeof (t_nodo));
        nuevo->numero = p_numero;
        nuevo->siguiente = NULL;
        if (colaVacia ()) {
            cola.principio = nuevo;
        } else {
            cola.final->siguiente = nuevo;
        }
        cola.final = nuevo; 
    }
    void pop () {
        t_nodo * aux;
        aux = cola.principio;
        if (cola.principio == cola.final) {
            cola.principio = NULL;
            cola.final = NULL;
        } else {
            cola.principio = cola.principio->siguiente;
        }
        free (aux);
    }