construct an array of integers to achieve specific sequence
<blockquote>
  <p>construct the shortest possible sequence of integers ending with A,
  using the following rules:</p>
  
  <p>the first element of the sequence is 1, each of the successive
  elements is the sum of any two preceding elements (adding a single
  element to itself is also permissible), each element is larger than
  all the preceding elements; that is, the sequence is increasing.</p>
  
  <p>For example, for A = 42, a possible solutions is [1, 2, 3, 6, 12, 24,
  30, 42]. Another possible solution is [1, 2, 4, 5, 8, 16, 21, 42].</p>
</blockquote>

<p>I have written the following but it fails on input of 456, by returning[1,2,4,8,16,32,64,128,200,256,456] , there are no numbers in the sequence that can be added together to get 200.</p>

<p>how can I fix the below code? what am I doing wrong?</p>

<pre><code>  public static int[] hit(int n)
    {
        List&lt;int&gt; nums = new List&lt;int&gt;();

        int x = 1;

        while (x &lt; n)
        {
            nums.Add(x);
            x = x * 2;

            if (x &gt; n)
            {

                    nums.Add(n - (x / 2));

                nums.Add(n);
            }
        }

        nums.Sort();
        int[] arr =  nums.ToArray();
        return arr;
    }
</code></pre>
