Ayuda Programa M-Alternante

Iniciado por Edmec, 15 Abril 2014, 15:39 PM

0 Miembros y 1 Visitante están viendo este tema.

Edmec

Buenos días compañeros,

Tengo un problema el quiero solicitar su valiosa ayuda.  (solo busco un tip, idea que me pueda ayudar a resolver el problema)

El problema es el siguiente:

Un número entero positivo se dice M-alternante si : El primer dígito es par entonces los 2 dígitos siguientes deben ser impares, luego los tres siguientes dígitos deben ser pares y así sucesivamente.

Por ejemplo: 122357 es un número M-alternante de orden 3
Lo que no encuentro como hacer es para ir comparando si el primero es par, y luego los siguientes 2 de la cadena sean impares y luego los siguientes 3 de la cadena sean impares.

Les agradezco mucho cualquier tip que me puedan dar,




eferion

Convierte el número a cadena. Después puedes diseñar una función recursiva en la que, en base al número de pasos, sepa cuántos dígitos debe comparar y si estos han de ser pares o impares.

Edmec

Gracias por tu ayuda,

te cometo que esa parte si la he logrado resolver, he ingresado el numero en un string, para ir manipulando cada caracter por separado (Claro haciendo las conversiones necesarias). y verificar con mod (%) si es par o impar.

Pero lo que se me esta complicando es el procedimiento que vaya alternando 1 primero par, luego los siguientes 2 impares, luego los siguientes 3 pares, luego siguientes 4 impares, asi sucesivamente.

1 par
siguientes 2 posiciones impares
siguientes 3 posiciones pares
siguientes 4 posiciones impares
siguientes 5 posiciones pares
asi sucesivamente para Numeros de N posiciones.

Nuevamente gracias por tu ayuda,

eferion

Una función recursiva que reciba dos parámetros: la cadena (un puntero) y el paso (un entero).

La llamada a la función desde el main se hace pasando como paso un 0.

La función calcula, en base al paso, la posición desde la que debe empezar a comprobar, la cantidad de cifras a chequear y si éstas deben ser pares o impares:

* paso 0: 1 cifra, empieza en 0 y debe ser par
* paso 1: 2 cifras, empieza en 1 y deben ser impares
* paso 2: 3 cifras, empieza en 3 y deben ser pares
...

Si la comprobación es correcta se vuelve a llamar a sí misma incrementando el paso en 1 y retornando la salida de esta última llamada.

Si, en cambio, ha llegado al final de la cadena, retorna un 1.

Si no se cumple la validación, retorna un 0.

Después de todo el proceso, si tienes un 1 es que el número es M-Alternante y si es un 0... pues no.

ivancea96

Sinó, puedes hacer 2 bucles encadenados. El mayor va contando desde i=1 hasta ..., y el otro cuenta desde j=1 hasta i. Así, j es 1, 2, 3, etc. Si i es par, compruebas que sea par; si i es impar, compruebas que sea impar (o al revés).

Es una idea, para saltarse la recursividad.