construir uma matriz de inteiros para alcançar uma seqüência específica
construir a seqüência mais curta possível de inteiros terminando com A, usando as seguintes regras:
o primeiro elemento da seqüência é 1, cada um dos elementos sucessivos é a soma de quaisquer dois elementos anteriores (adicionar um único elemento a si mesmo também é permitido), cada elemento é maior que todos os elementos anteriores; isto é, a sequência está aumentando.
Por exemplo, para A = 42, uma solução possível é [1, 2, 3, 6, 12, 24, 30, 42]. Outra solução possível é [1, 2, 4, 5, 8, 16, 21, 42].
Eu escrevi o seguinte, mas ele falha na entrada de 456, retornando [1,2,4,8,16,32,64,128,200,256,456], não há números na seqüência que podem ser somados para obter 200.
Como posso corrigir o código abaixo? O que estou fazendo de errado?
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;
}