Imprimir_combinaciones

bibop1611 Mensajes publicados 5 Estado Miembro -  
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...


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

2 respuestas

fiddy Mensajes publicados 441 Fecha de registro   Estado Colaborador Última intervención   1 847
 
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
0