Imprimir_combinaciones
bibop1611
Mensajes publicados
5
Estado
Miembro
-
fiddy Mensajes publicados 441 Fecha de registro Estado Colaborador Última intervención -
fiddy Mensajes publicados 441 Fecha de registro Estado Colaborador Última intervención -
Hola,
Quisiera escribir una función que muestre todas las diferentes combinaciones de n cifras en orden ascendente.
* n estará dado de tal manera que: 0 < n < 10.
* Si n = 2, esto da algo como:
01, 02, 03, ..., 09, 12, ..., 79, 89
* El prototipo de la función debe ser:
void print_combn(int n);
Entonces pensé en la lógica:
calcular v como el valor máximo del número tratado según n (por ejemplo, para n = 3, v = 999)
bucle de 0 a v
construir una cadena c de n caracteres a partir del valor actual (valor justificado a la derecha relleno de 0 a la izquierda si es necesario)
recorrer c y probar que los caracteres son crecientes
si es así, mostrar c
Así que comencé a escribir esto como un fragmento de código, pero no logro continuar...
Aquí está, ¡así que ayúdame por favor! :3
ps: la única función que tengo derecho a usar es putchar.
Configuración: Linux / Firefox 24.0
Quisiera escribir una función que muestre todas las diferentes combinaciones de n cifras en orden ascendente.
* n estará dado de tal manera que: 0 < n < 10.
* Si n = 2, esto da algo como:
01, 02, 03, ..., 09, 12, ..., 79, 89
* El prototipo de la función debe ser:
void print_combn(int n);
Entonces pensé en la lógica:
calcular v como el valor máximo del número tratado según n (por ejemplo, para n = 3, v = 999)
bucle de 0 a v
construir una cadena c de n caracteres a partir del valor actual (valor justificado a la derecha relleno de 0 a la izquierda si es necesario)
recorrer c y probar que los caracteres son crecientes
si es así, mostrar c
Así que comencé a escribir esto como un fragmento de código, pero no logro continuar...
void print_combn(int n)
{
int vmax = 10;
int i = 1;
while (i < n)
{
vmax *= 10;
i++;
}
i = 1;
while (i < vmax)
{
char tab[n];
i++;
}
}
Aquí está, ¡así que ayúdame por favor! :3
ps: la única función que tengo derecho a usar es putchar.
Configuración: Linux / Firefox 24.0
Enlaces relacionados:
- Todos los códigos posibles del 0 al 9 (4 dígitos)
- ¿cuántas combinaciones de números de 10 cifras hay?
- Probabilidad del número de combinaciones de tres dígitos del 0 al 9
- combinaciones posibles de 0 a 9 por grupos de 3 dígitos
- probabilidad urgente los códigos de seis cifras.
- Todas las combinaciones de 4 dígitos del 1 al 48
2 respuestas
Ah, qué lástima por putchar().
Podías hacer en su lugar un bucle for de 1 a v y mostrar solo los números que cumplan la condición (crecimiento de los dígitos).
Aparte, en tu programa:
char tab[n];
No te lo aconsejo. Funciona en C99, pero no por las razones que piensas y puede que tu profe lo considere incorrecto. Hay que optar por la asignación dinámica (malloc/calloc) y utilizar el free adecuado.
A nivel algorítmico, puedes hacerlo más simple.
Te doy una pista.
Necesitas n bucles for.
Para el primero, haces de 0 a 9 (variable i) y muestras i
Para el segundo, haces de i a 9 (variable j) y muestras j
Para el tercero, haces de j a 0 (variable k) y muestras k
...
Falta encontrar el truco para los n bucles for, para las variables i, j, k (índice: arreglo).
No dudes en publicar tu programa para que te corrijamos después de haber tenido en cuenta este post.
Ánimo.
--
Google es tu amigo
Podías hacer en su lugar un bucle for de 1 a v y mostrar solo los números que cumplan la condición (crecimiento de los dígitos).
Aparte, en tu programa:
char tab[n];
No te lo aconsejo. Funciona en C99, pero no por las razones que piensas y puede que tu profe lo considere incorrecto. Hay que optar por la asignación dinámica (malloc/calloc) y utilizar el free adecuado.
A nivel algorítmico, puedes hacerlo más simple.
Te doy una pista.
Necesitas n bucles for.
Para el primero, haces de 0 a 9 (variable i) y muestras i
Para el segundo, haces de i a 9 (variable j) y muestras j
Para el tercero, haces de j a 0 (variable k) y muestras k
...
Falta encontrar el truco para los n bucles for, para las variables i, j, k (índice: arreglo).
No dudes en publicar tu programa para que te corrijamos después de haber tenido en cuenta este post.
Ánimo.
--
Google es tu amigo