Obtener sub-secuencias continuas de un numero

Iniciado por Clara007, 23 Abril 2020, 22:43 PM

0 Miembros y 2 Visitantes están viendo este tema.

Clara007

Hola, necesito un código que dado un determinado numero genere todas las posibles sub-secuencias continuas en orden
Por ejemplo:
Numero: 49142
Sub-secuencias validas: "491", "914", "142", "4914", "9142"
Ya de 6 dígitos no seria posible generar ninguna y esto se tiene que validar

Agradezco cualquier idea que me puedan dar

Gracias!

engel lex

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Clara007

Recién empiezo en esto de la programación, asi que ideas tengo pocas, luego de generar las combinaciones de dos lugares es decir 49, 91, 14, 42 no se como generar el resto

engel lex

si publicas por lo menos lo que llevas así sea lo minimo se puede en general ver como estas encaminada y las librerias que usas... pero bueno vamos a eso...

tienes que usar 2 ciclos

el primero para la cantidad de caracteres y el segundo para la posición tal que


entero largo;
entero inicio;
para(largo = 2; largo < texto.length(); largo++){
  para (inicio = 0; inicio < texto.length()-largo; inicio++){
    ...
    ... texto.substring(inicio, inicio+largo);
    ...
  }
}



El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

K-YreX

#4
No te daré el código pero te daré una idea...
Supón que tienes un número de 5 cifras como el de tu supuesto (49142). Puedes hacer las siguientes subsecuencias:

Longitud 1: 4 - 9 - 1 - 4 - 2
Longitud 2: 49 - 91 - 14 - 42
Longitud 3: 491 - 914 - 142
Longitud 4: 4914 - 9142
Longitud 5: 49142 (Esta última puede obviarse como subsecuencia... Dependerá de tu lógica del problema, es decir, que tú sabrás si considerarla o no)


Lo que hay que conseguir es un patrón y de aquí podemos obtener el siguiente:
Se empiezan generando n subsecuencias de longitud 1 siendo n el número de cifras del número en cuestión. A partir de ahí si se incrementa la longitud de la subsecuencia en x, se decrementará el número de subsecuencias en x también. Dicho de otra forma:

Longitud: 1 -> Subsecuencias: n
Longitud: 2 -> Subsecuencias: n-1
...


Tienes que hacer una estructura repetitiva, un bucle. Sabes cuántas veces se repetirá dicho bucle? Sí, n veces si se considerá la subsecuencia de longitud n o n-1 si se considerán las subsecuencias hasta longitud = n-1. Entonces el bucle más adecuado es un for(). Voy a suponer que el número completo también forma una subsecuencia para no tener que explicar ambas posibilidades. Tú puedes modificarlo para que no sea así.
El bucle puedes hacer que empiece con i = 1 y vaya hasta i = n y en cada iteración mostrarás las subsecuencias de longitud i. Para cada iteración de i, cuántas subsecuencias hay? Suponiendo que i empieza en 1, n - i + 1:

PARA EL SUPUESTO n = 5
Iteracion i = 1 -> Longitud: 1 -> Subsecuencias: 5-1+1 = 5
Iteracion i = 2 -> Longitud: 2 -> Subsecuencias: 5-2+1 = 4
...

Entonces tendrás que hacer un bucle for() dentro del primer bucle for(). Este haremos que empiece en j = 0 hasta s (subsecuencias) = n-i+1. Y en cada iteración de este bucle interno tienes que mostrar el número empezando en la cifra j y con una longitud de i. (Suponiendo que 0 es la primera cifra del número y n-1 la última).

Lo que te queda es ver cómo muestras la parte del número que te interesa. La mejor opción es guardar el número en un array (vector) dejando cada cifra del número en una posición del array.
Otra opción es usar las matemáticas:

SI n ES UN NUMERO ENTERO:
n % 10 -> Devuelve la última cifra
n % 100 -> Devuelve las dos últimas cifras
...
n / 10 -> Devuelve el número sin la última cifra
n / 100 -> Devuelve el número sin las dos últimas cifras
...


El resto tiene que salir de ti. Si tienes alguna duda concreta siempre puedes preguntar pero tienes que esforzarte para entender todo lo expuesto anteriormente así que antes de preguntar puedes coger un papel y boli y ver cómo se repiten los patrones que te he dicho. No esperes que te demos la solución sin esfuerzo porque eso no va a pasar. Suerte.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;