Desafio
O desafio é escrever um código que use um número inteiro positivo 'n' como entrada e exiba todas as maneiras possíveis pelas quais os números de 1 - n podem ser escritos, com sinal positivo ou negativo entre eles, de forma que sua soma seja igual a zero. Lembre-se de que você só pode usar adição ou subtração.
Por exemplo, se a entrada for 3, existem 2 maneiras de fazer a soma 0:
1+2-3=0
-1-2+3=0
Observe que os números estão em ordem, começando de 1 até n (que é 3 neste caso). Como é evidente no exemplo, o sinal do primeiro número também pode ser negativo, portanto, tenha cuidado.
Agora, 3 era praticamente simples. Vamos listar todas as maneiras quando consideramos o número 7.
1+2-3+4-5-6+7=0
1+2-3-4+5+6-7=0
1-2+3+4-5+6-7=0
1-2-3-4-5+6+7=0
-1+2+3+4+5-6-7=0
-1+2-3-4+5-6+7=0
-1-2+3+4-5-6+7=0
-1-2+3-4+5+6-7=0
Então aqui temos um total de 8 maneiras possíveis.
Entrada e saída
Como afirmado anteriormente, a entrada seria um número inteiro positivo . Sua saída deve conter todas as formas possíveis pelas quais os números dão uma soma de zero. Caso não exista uma maneira possível de fazer o mesmo, você pode produzir o que quiser.
Além disso, você pode imprimir a saída em qualquer formato que desejar . Mas, deve ser compreensível . Por exemplo, você pode imprimi-lo como no exemplo acima. Ou você pode apenas imprimir os sinais dos números em ordem. Caso contrário, você também pode imprimir '0 e' 1 'em ordem, onde' 0 'exibirá sinal negativo e' 1 'exibirá sinal positivo (ou vice-versa).
Por exemplo, você pode representar 1 + 2-3 = 0 usando:
1+2-3=0
1+2-3
[1,2,-3]
++-
110
001
No entanto, eu recomendaria o uso de qualquer um dos três primeiros formatos para simplificar. Você pode assumir que todas as entradas são válidas.
Exemplos
7 ->
1+2-3+4-5-6+7=0
1+2-3-4+5+6-7=0
1-2+3+4-5+6-7=0
1-2-3-4-5+6+7=0
-1+2+3+4+5-6-7=0
-1+2-3-4+5-6+7=0
-1-2+3+4-5-6+7=0
-1-2+3-4+5+6-7=0
4 ->
1-2-3+4=0
-1+2+3-4=0
2 -> -
8 ->
1+2+3+4-5-6-7+8=0
1+2+3-4+5-6+7-8=0
1+2-3+4+5+6-7-8=0
1+2-3-4-5-6+7+8=0
1-2+3-4-5+6-7+8=0
1-2-3+4+5-6-7+8=0
1-2-3+4-5+6+7-8=0
-1+2+3-4+5-6-7+8=0
-1+2+3-4-5+6+7-8=0
-1+2-3+4+5-6+7-8=0
-1-2+3+4+5+6-7-8=0
-1-2+3-4-5-6+7+8=0
-1-2-3+4-5+6-7+8=0
-1-2-3-4+5+6+7-8=0
Pontuação
Isso é código-golfe , então o código mais curto vence!
+
como N
e -
como -N
, ou isso está levando isso longe demais? (eg 3
-> [[-3,-3,3], [3,3,-3]]
)
0
e, 1
mas usando N
e -N
(veja minha edição acima)