Yo diría que algo así te puede servir:
** Para que el algoritmo anterior funcione correctamente el array de dígitos debe estar ordenado.
Las condiciones de los bucles for() no son muy complicadas pero cualquier duda no dudes en comentarla.
Código (csharp) [Seleccionar]
int numeroMaximo = 49;
int[] digitos = { 1, 4, 5, 7, 8, 9 };
List<int> numerosGenerados = new List<int>();
int decenaMaxima = numeroMaximo / 10;
int unidadMaxima = numeroMaximo % 10;
for(int i = 0; i < digitos.Length && digitos[i] <= decenaMaxima; ++i)
for(int j = 0; j < digitos.Length && (digitos[i] < decenaMaxima || digitos[j] <= unidadMaxima); ++j)
numerosGenerados.Add(digitos[i] * 10 + digitos[j]);
** Para que el algoritmo anterior funcione correctamente el array de dígitos debe estar ordenado.
Las condiciones de los bucles for() no son muy complicadas pero cualquier duda no dudes en comentarla.