Einfach 0 gelöst 0% Erfolgsquote

Preis-Decorator

Umhülle einen Basispreis mit Discount-, Steuer-, Versand- und Gutschein-Dekoratoren, die in Reihenfolge angewendet werden.

Das lernst du

  • Verhalten in Schichten um einen Wert legen
  • Prozente in der richtigen Reihenfolge anwenden
  • Einen Wert nie unter null fallen lassen

Problem

Das decorator-Muster erweitert Verhalten, indem es ein Objekt in Schichten einhüllt. Jede Schicht hier verändert den Preis der darin enthaltenen Schicht.

Starte mit base_price und wende die Dekoratoren in Reihenfolge an:

  • discount p: reduziere den Preis um p Prozent.
  • tax p: erhöhe den Preis um p Prozent.
  • shipping a: addiere einen festen Betrag a.
  • coupon a: ziehe a ab, aber gehe niemals unter 0.

Implementiere price_decorators(base_price, decorators).

Eingabe

base_price: Der Startpreis.

decorators: Die Schichten, in der Reihenfolge, in der sie den Preis umhüllen. Beträge dürfen Dezimalstellen haben.

Ausgabe

Gib den endgültigen Preis zurück. Antworten innerhalb von 1e-6 werden akzeptiert.

Einschränkungen

0 ≤ base_price ≤ 1,000,000

0 ≤ Anzahl der Decorator ≤ 100; 0 ≤ p ≤ 100, 0 ≤ a ≤ 100,000

Beispiele

Beispiel 1
Eingabe:
base_price = 100
decorators = ["discount 10", "tax 8", "shipping 5"]

Erwartete Ausgabe:
expected = 102.2
Eingabe:
long long base_price = 100;
std::vector<std::string> decorators = {"discount 10", "tax 8", "shipping 5"};

Erwartete Ausgabe:
double expected = 102.2;
Eingabe:
long base_price = 100;
string[] decorators = new string[] {"discount 10", "tax 8", "shipping 5"};

Erwartete Ausgabe:
double expected = 102.2;

Erläuterung

100 − 10% = 90, plus 8% Steuer = 97.2, plus 5 Versand = 102.2.

Beispiel 2
Eingabe:
base_price = 20
decorators = ["coupon 25", "shipping 4"]

Erwartete Ausgabe:
expected = 4.0
Eingabe:
long long base_price = 20;
std::vector<std::string> decorators = {"coupon 25", "shipping 4"};

Erwartete Ausgabe:
double expected = 4.0;
Eingabe:
long base_price = 20;
string[] decorators = new string[] {"coupon 25", "shipping 4"};

Erwartete Ausgabe:
double expected = 4.0;

Erläuterung

Der Gutschein würde den Preis unter null senken, also bleibt er bei 0; Versand macht daraus 4.

So gehst du vor

Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.

Hinweis 1

Wende die Schichten genau in der gegebenen Reihenfolge an.

Hinweis 2

Prozente beziehen sich auf den aktuellen Preis, nicht auf den Grundpreis.

Hinweis 3

Ein Gutschein kann den Preis nie unter 0 drücken.

Erwartete Komplexität

Zeit O(Anzahl der Decorator), zusätzlicher Speicher O(1)

Referenzen

Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.

Von anderen lernen

Community-Lösungen

Noch keine veröffentlichten Lösungen. Löse die Aufgabe und teile als Erster eine Lösung.