Konstruieren Sie ein Array von Ganzzahlen, um eine bestimmte Sequenz zu erreichen

Konstruieren Sie die kürzestmögliche Folge von Ganzzahlen, die mit A enden, indem Sie die folgenden Regeln anwenden:

das erste Element der Folge ist 1, jedes der aufeinanderfolgenden Elemente ist die Summe von zwei beliebigen vorhergehenden Elementen (das Hinzufügen eines einzelnen Elements zu sich selbst ist ebenfalls zulässig), jedes Element ist größer als alle vorhergehenden Elemente; das heißt, die Reihenfolge nimmt zu.

Zum Beispiel ist für A = 42 eine mögliche Lösung [1, 2, 3, 6, 12, 24, 30, 42]. Eine andere mögliche Lösung ist [1, 2, 4, 5, 8, 16, 21, 42].

Ich habe das Folgende geschrieben, aber es schlägt bei der Eingabe von 456 fehl. Durch Rückgabe von [1,2,4,8,16,32,64,128,200,256,456] gibt es in der Sequenz keine Zahlen, die zu 200 addiert werden können.

Wie kann ich den folgenden Code reparieren? Was mache ich falsch?

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

Antworten auf die Frage(5)

Ihre Antwort auf die Frage