Angenommen, ich habe einen Ausdruck:
9 * 8 + 1 - 4
Dieser Ausdruck kann je nach Rangfolge des Operators auf sechs verschiedene Arten interpretiert werden:
(((9 * 8) + 1) - 4) = 69 (* + -)
((9 * 8) + (1 - 4)) = 69 (* - +)
((9 * (8 + 1)) - 4) = 77 (+ * -)
(9 * ((8 + 1) - 4)) = 45 (+ - *)
((9 * 8) + (1 - 4)) = 69 (- * +)
(9 * (8 + (1 - 4))) = 45 (- + *)
Angenommen, ich bin ein Entwickler und möchte mir keine Rangfolgetabellen usw. merken, also rate ich einfach.
In diesem Fall wäre die größte Fehlerquote 45-77, was einer Differenz von 32 entspricht. Dies bedeutet, dass meine Vermutung nur um maximal 32 verfehlt wird.
Die Herausforderung
Bei einem gegebenen Ausdruck , der aus Zahlen und +
, -
, *
, /
(Integer - Division) und den %
Ausgang der absolute Differenz des größten und kleinsten möglichen Wertes für diesen Ausdruck, auf der Grundlage der Rangfolge der Operatoren.
Spezifikationen
- Der Eingabeausdruck enthält keine Klammern und jeder Operator ist linksassoziativ.
- Der Eingabeausdruck enthält nur nicht negative Ganzzahlen. Unterausdrücke können jedoch zu Negativen ausgewertet werden (z
1 - 4
. B. ). - Sie können den Ausdruck in jedem vernünftigen Format verwenden. Zum Beispiel:
"9 * 8 + 1 - 4"
"9*8+1-4"
[9, "*", 8, "+", 1, "-", 4]
[9, 8, 1, 4], ["*", "+", "-"]
- Die Eingabe enthält mindestens 1 und höchstens 10 Operatoren.
- Jeder Ausdruck, der eine Division oder ein Modulo durch 0 enthält, sollte ignoriert werden.
- Sie können davon ausgehen, dass Modulo keine negativen Operanden erhält.
Testfälle
9 * 8 + 1 - 4 32
1 + 3 * 4 3
1 + 1 0
8 - 6 + 1 * 0 8
60 / 8 % 8 * 6 % 4 * 5 63
%
Operator mit negativen Zahlen? So wie C oder Python oder so?
%
als hätten Sie in Ihrem zweiten Beispiel zwei unterschiedliche Prioritäten.