construir una matriz de enteros para lograr una secuencia específica
construye la secuencia más corta posible de enteros que terminen con A, usando las siguientes reglas:
el primer elemento de la secuencia es 1, cada uno de los elementos sucesivos es la suma de cualquiera de los dos elementos anteriores (también se permite agregar un elemento único a sí mismo), cada elemento es más grande que todos los elementos anteriores; Es decir, la secuencia va en aumento.
Por ejemplo, para A = 42, una posible solución es [1, 2, 3, 6, 12, 24, 30, 42]. Otra posible solución es [1, 2, 4, 5, 8, 16, 21, 42].
He escrito lo siguiente pero falla en la entrada de 456, al devolver [1,2,4,8,16,32,64,128,200,256,456], no hay números en la secuencia que puedan sumarse para obtener 200.
¿Cómo puedo arreglar el siguiente código? ¿Qué estoy haciendo mal?
public static int[] hit(int n)
{
List<int> nums = new List<int>();
int x = 1;
while (x < n)
{
nums.Add(x);
x = x * 2;
if (x > n)
{
nums.Add(n - (x / 2));
nums.Add(n);
}
}
nums.Sort();
int[] arr = nums.ToArray();
return arr;
}