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;
    }

Respuestas a la pregunta(5)

Su respuesta a la pregunta