Ver Mensaje Individual
  #37 (permalink)  
Antiguo 28/11/2014, 02:57
Pantaláimon
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
Respuesta: Petando la pila. Problemas y retos usando recursividad.

¡Viernes otra vez! Así que os traigo dos problemas más.

1) ¡No te repitas!

Escribe una función noRep que dada una cadena de caracteres, construya otra sin repetición de caracteres consecutivos. Por ejemplo si la cadena es "abccccfabaddeff", debe devolver "abcfabadef". El prototipo de la función en C es:
Código C:
Ver original
  1. char* noRep(char* destino, const char* origen);
Donde origen es la cadena con caracteres repetidos y destino es la cadena donde se guardará la cadena resultado sin caracteres no repetidos. La función retorna la cadena destino.
Como restricción de diseño, decir que dentro de noRep no se reservará memoria dinámica tal que luego tenga que ser liberada fuera de la función. Vaya, que en caso de que queráis reservar memoria dinamicamente para destino, hacedlo fuera de la función.

Prototipo para C++:
Código C++:
Ver original
  1. std::string noRep(std::string origen);
origen es la cadena con posibles caracteres repetidos, el valor que retorna es la cadena resultado sin caracteres repetidos.

2) Números vampiros

Dentro de la fauna de números encontramos unos que tienen colmillos. Son los números vampiros. Los números vampiros son aquellos que son resultado del producto de dos números con el mismo número de dígitos, llamados colmillos. Además, el conjunto de dígitos de los dos colmillos ha de ser el mismo conjunto que los digitos del número vampiro. Es decir, 1260 es vampiro porque es el producto de 21*60 y, 21 y 60 en conjunto está formado por los mismos digitos que 1260.
Lo mismo ocurre con 1395 que es producto de 93*15.

Los números tal como los he definido anteriormente son vampiros salvo cierta excepción: un número no es vampiro si solamente se puede contruir como el producto de dos colmillos que ambos acaben en 0. 1260, como decíamos es vampiro, pero 126000 no lo es porque, no hay colmillos que lo construyan sin ser ambos acabados en 0. 126000 = 210 * 600.

El segundo problema consistirá en contruir una función esVampiro que retorne 1 si un número es vampiro ó 0 si no lo es. Prototipo de la función:
Código C:
Ver original
  1. int esVampiro(int num);

Y ahora... ¡A petar la pila!
__________________
github.com/xgbuils | npm/xgbuils

Última edición por Pantaláimon; 28/11/2014 a las 03:03