Herausforderung
Die Herausforderung besteht darin, einen Code zu schreiben, der eine positive Ganzzahl 'n' als Eingabe verwendet und alle möglichen Arten anzeigt, wie die Zahlen von 1 - n mit einem positiven oder negativen Vorzeichen dazwischen geschrieben werden können, so dass ihre Summe gleich ist gleich Null. Bitte denken Sie daran, dass Sie nur Addition oder Subtraktion verwenden dürfen.
Wenn die Eingabe beispielsweise 3 ist, gibt es zwei Möglichkeiten, die Summe zu 0 zu machen:
1+2-3=0
-1-2+3=0
Beachten Sie, dass die Zahlen von 1 bis n (in diesem Fall 3) geordnet sind. Wie aus dem Beispiel hervorgeht, kann das Vorzeichen der ersten Zahl auch negativ sein. Seien Sie also vorsichtig.
Nun, 3 war ziemlich einfach. Lassen Sie uns alle Möglichkeiten auflisten, wenn wir die Zahl 7 betrachten.
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
Hier haben wir also insgesamt 8 Möglichkeiten.
Eingabe und Ausgabe
Wie bereits erwähnt, wäre die Eingabe eine positive ganze Zahl . Ihre Ausgabe sollte alle möglichen Arten enthalten, in denen die Zahlen eine Summe von Null ergeben. Falls dies nicht möglich ist , können Sie alles ausgeben, was Sie möchten.
Außerdem können Sie die Ausgabe in einem beliebigen Format drucken Sie möchten . Aber es sollte verständlich sein . Beispielsweise können Sie es wie in dem obigen Beispiel drucken. Oder Sie drucken einfach die Zeichen der Zahlen in der angegebenen Reihenfolge. Andernfalls können Sie auch '0' und '1' in der angegebenen Reihenfolge ausgeben, wobei '0' ein negatives Vorzeichen und '1' ein positives Vorzeichen anzeigt (oder umgekehrt).
Sie können beispielsweise 1 + 2-3 = 0 darstellen, indem Sie Folgendes verwenden:
1+2-3=0
1+2-3
[1,2,-3]
++-
110
001
Der Einfachheit halber würde ich jedoch empfehlen, eines der ersten drei Formate zu verwenden. Sie können davon ausgehen, dass alle Eingaben gültig sind.
Beispiele
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
Wertung
Das ist Code-Golf , also gewinnt der kürzeste Code!
+
als N
und -
als darstellen -N
, oder geht das zu weit? (zB 3
-> [[-3,-3,3], [3,3,-3]]
)
0
und 1
Option, aber mit N
und -N
(siehe meine Bearbeitung oben)