skonstruuj tablicę liczb całkowitych, aby uzyskać określoną sekwencję
skonstruuj najkrótszą możliwą sekwencję liczb całkowitych kończącą się literą A, stosując następujące reguły:
pierwszym elementem sekwencji jest 1, każdy z kolejnych elementów jest sumą dwóch poprzednich elementów (dodanie pojedynczego elementu do siebie jest również dopuszczalne), każdy element jest większy niż wszystkie poprzednie elementy; to znaczy sekwencja wzrasta.
Na przykład dla A = 42 możliwe rozwiązania to [1, 2, 3, 6, 12, 24, 30, 42]. Innym możliwym rozwiązaniem jest [1, 2, 4, 5, 8, 16, 21, 42].
Napisałem następujące, ale nie powiedzie się na wejściu 456, zwracając [1,2,4,8,16,32,64,128,200,256,456], nie ma żadnych numerów w sekwencji, które można by dodać do 200.
jak mogę naprawić poniższy kod? Co ja robię źle?
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;
}