Wyzwanie
Wyzwanie polega na napisaniu kodu, który przyjmuje dodatnią liczbę całkowitą n jako dane wejściowe i wyświetla wszystkie możliwe sposoby zapisywania liczb od 1 - n, ze znakiem dodatnim lub ujemnym pomiędzy, tak że ich suma wynosi równa zero. Pamiętaj, że możesz używać tylko dodawania lub odejmowania.
Na przykład, jeśli wartością wejściową jest 3, wówczas istnieją 2 sposoby, aby suma 0:
1+2-3=0
-1-2+3=0
Zauważ, że liczby są w porządku, zaczynając od 1 do n (w tym przypadku jest to 3). Jak widać z przykładu, znak pierwszej liczby może być również ujemny, więc bądź ostrożny.
Teraz 3 było bardzo proste. Wymieńmy wszystkie sposoby, biorąc pod uwagę liczbę 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
Mamy więc tutaj 8 możliwych sposobów.
Wejście i wyjście
Jak wspomniano wcześniej, wejście będzie dodatnią liczbą całkowitą . Twój wynik powinien zawierać wszystkie możliwe sposoby, w jakie liczby dają sumę zero. Jeśli nie ma możliwości zrobienia tego samego, możesz wypisać cokolwiek chcesz.
Ponadto, można wydrukować dane wyjściowe w dowolnym formacie chcesz . Ale powinno to być zrozumiałe . Na przykład możesz wydrukować go jak w powyższym przykładzie. Lub możesz po prostu wydrukować znaki liczb w kolejności. W przeciwnym razie możesz również drukować „0” i „1” w kolejności, gdzie „0” wyświetla znak ujemny, a „1” wyświetla znak dodatni (lub odwrotnie).
Na przykład możesz przedstawić 1 + 2-3 = 0, używając:
1+2-3=0
1+2-3
[1,2,-3]
++-
110
001
Jednak dla uproszczenia zaleciłbym użycie jednego z trzech pierwszych formatów. Możesz założyć, że wszystkie dane wejściowe są prawidłowe.
Przykłady
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
Punktacja
To jest kod-golf , więc wygrywa najkrótszy kod!
+
jako N
i -
jako -N
, czy to za daleko? (np. 3
-> [[-3,-3,3], [3,3,-3]]
)
0
i 1
, ale używając N
i -N
(patrz moja edycja powyżej)