Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ronbay en 23 Mayo 2021, 23:12 pm



Título: nesecito ayuda con recusividad por favor no entiendo.
Publicado por: ronbay en 23 Mayo 2021, 23:12 pm
ESCRIBIR UN PROCESO QUE LLEVE EL MAYOR DE LOS DIGITOS AL FINAL DE UN NUMERO
HACERLO CON EL METODO RECURSIVO.
EJEMPLO 382731
SOLUCION: 327318
 :-\


Título: Re: nesecito ayuda con recusividad por favor no entiendo.
Publicado por: Xyzed en 23 Mayo 2021, 23:29 pm
Hola.

¿En qué lenguaje lo necesitas?

No parece algo complicado.

No tengo noción de C, pero no debe ser complicado la verdad.

Yo creo que alguien con una idea en el lenguaje puede hacerlo sin problemas, pero bueno...

Te dejo una referencia de lo que deberías hacer pero en Python a ver si te sirve de algo:

Código
  1. ejemplo = "1359182"
  2. presolucion = max(ejemplo)
  3. presolucion2 = ejemplo.replace(presolucion, '')
  4. solucionfinal = presolucion2+presolucion
  5. print("Ejemplo: "+ejemplo)
  6. print("Solucion: "+solucionfinal)
  7.  
  8. #El code de arriba devuelve:
  9.  
  10. Ejemplo: 1359182
  11. Solucion: 1351829
  12.  

Te advierto de antemano, que aquí no realizan tareas y hubo revuelo sobre eso hace poco, así que te recomiendo aportar lo que intentaste.

Edito:
En cuando a la recursividad, lo mismo, no es nada complejo hacer algo así...

Saludos.


Título: Re: nesecito ayuda con recusividad por favor no entiendo.
Publicado por: ronbay en 23 Mayo 2021, 23:38 pm
en C++
ES PARA EL EMBARCADERO


Título: Re: nesecito ayuda con recusividad por favor no entiendo.
Publicado por: DtxdF en 23 Mayo 2021, 23:39 pm
Hola @ronbay

Las reglas dictan que no está permitido la realización de tareas, pero estoy seguro que muchos te ayudarán si dejas un adelanto, con un esfuerzo notorio.

Lo que se me ocurre para realizar lo que quieres, es usar Módulo (en C y muchos otros lenguajes es %) primero contra el número, el resultado almacenarlo en un arreglo, luego dividirlo entre 10 y realizar esta operación sucesivamente hasta que la variable donde se haga referencia al número sea 0.

Una vez realizado todas estas operaciones, puedes hacer dos cosas, aunque eso depende de tus necesidades: puedes usar algún algoritmo de ordenamiento si deseas un orden de menor a mayor, aunque no quedará exactamente como la solución que propones; también puedes usar otra variable donde hará referencia al número mayor del arreglo que se está recorriendo, que a su vez éste debe intercambiarse con el último elemento del arreglo.

Por último, pero esto puede ser opcional si desea "reconstruir el número", es, a partir del inicio del inicio del arreglo, obtener ese elemento, multiplicarlo con 10, sumarle el segundo elemento, y así con los mismos números. Debería obtener el número "reconstruido" pero con el número mayor recorrido.

Es opcional, como le dije, ya que si no es importante, puede imprimir la lista tal cual recorriendo el arreglo y después de ello, imprimir una nueva línea.

Espero le sirva.

~ DtxdF


Título: Re: nesecito ayuda con recusividad por favor no entiendo.
Publicado por: ronbay en 23 Mayo 2021, 23:50 pm
PERDON, EN SI QUIERO QUE ME GUIEN POR QUE ME QUEDO ESTANCADO Y FRUSTRA.

EN ESTE PROCEDIMIENTO HALLO EL MAYOR PERO LO QUE ME ESTA COSTANDO ES PONER ESE DIGITO MAYOR AL FINAL DEL ARREGLO Y ES LO QUE ME COMPLICA.

ESTE ES MI CODIGO:
Código
  1. void Mayor_At_Last(Cardinal &x)
  2. {byte s;
  3. if(x<10){//Caso Base
  4. s = x;
  5.  
  6. }else{//Caso General
  7. s = x % 10;
  8. x = x / 10;
  9. Mayor_At_Last(x);//Mayor(358267)-> 8
  10.  
  11. if (s  > x){//esta en si es la que alla el mayor
  12. x = s;
  13. }
  14.  
  15. }
  16.  
  17. }
  18.  
  19.  

[MOD] No esta permitido postear todo en mayusculas, y el codigo debe estar entre etiquetas GeSHi.


Título: Re: nesecito ayuda con recusividad por favor no entiendo.
Publicado por: DtxdF en 24 Mayo 2021, 00:48 am
@ronbay

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX_N 9
  5.  
  6. typedef struct {
  7.    int max_number;
  8.    int index;
  9. } number;
  10.  
  11. int main(void)
  12. {
  13.    int n = 358267;
  14.    int array[MAX_N], *array_ptr = array;
  15.    int aux, tmp;
  16.    register int i = 0;
  17.  
  18.    /* Extraemos cada digito */
  19.    while (n != 0 && i < MAX_N) {
  20.        *array_ptr++ = n % 10;
  21.  
  22.        n /= 10;
  23.        i++;
  24.    }
  25.  
  26.    /* Usamos el ordenamiento burbuja */
  27.    for (int aux_i = 0; aux_i < i; aux_i++) {
  28.        for (int aux_j = 0; aux_j < i-1; aux_j++) {
  29.            if (array[aux_j] > array[aux_j+1]) {
  30.                aux = array[aux_j];
  31.                array[aux_j] = array[aux_j+1];
  32.                array[aux_j+1] = aux;
  33.            }
  34.        }
  35.    }
  36.  
  37.    number mynumber;
  38.    mynumber.index = 0;
  39.    mynumber.max_number = 0;
  40.  
  41.    /* Extraemos el número mayor */
  42.    int j;
  43.    for (j = 0; j < i; j++)
  44.        if (array[j] > mynumber.max_number) {
  45.            mynumber.max_number = array[j];
  46.            mynumber.index = j;
  47.        }
  48.  
  49.    /* Lo intercambiamos con el último y el número mayor */
  50.    tmp = array[--j];
  51.    array[j] = mynumber.max_number;
  52.    array[mynumber.index] = tmp;
  53.  
  54.    /* Reconstruimos el número */
  55.    int k, r = 0;
  56.    for (k = 0; k < i; k++) {
  57.        r *= 10;
  58.        r += array[k];
  59.    }
  60.  
  61.    printf("%d\n", r);
  62.  
  63.    return EXIT_SUCCESS;
  64. }

No es recursivo, y tampoco sé si es lo que deseas, pero te puede servir para dar un paso más.

~ DtxdF


Título: Re: nesecito ayuda con recusividad por favor no entiendo.
Publicado por: ronbay en 24 Mayo 2021, 02:44 am
gracias


Título: Re: nesecito ayuda con recusividad por favor no entiendo.
Publicado por: prosebas en 24 Mayo 2021, 02:52 am
Código
  1.  
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. void recursive(int number, int *arr, int *i)
  5. {
  6.    arr[*i] = number % 10;
  7.    *i += 1;
  8.    if (number >= 10)
  9.        recursive(number / 10, arr, i);
  10.    else
  11.    {
  12.        //Ordenas el arreglo y corres las posiciones
  13.    }
  14. }
  15. int main(void)
  16. {
  17.    int num = 382731, arr[10], size = 0;
  18.    recursive(num, arr, &size);
  19.    for (int i = size - 1; i >= 0; i--)
  20.        printf("%d", arr[i]);
  21. }
  22.  

Esta es una implementación recursiva, estas obteniendo digito a digito guardandolo en arr , en el else solo debes obtener el mayor e intercambiar posiciones deberias usar un arreglo auxiliar para correr las posiciones.

Espero te sea util  :D


Título: Re: nesecito ayuda con recusividad por favor no entiendo.
Publicado por: ronbay en 24 Mayo 2021, 03:08 am
muchas gracias..implementare loq ue hice a tu codigo
Graccias ;-)