Die meisten Trinkgeldrechner-Apps nehmen einfach einen pauschalen Prozentsatz des Essenspreises ein. Wenn Ihre Mahlzeit beispielsweise 23,45 USD beträgt, können Sie ein Trinkgeld von 15% = 3,52 USD oder ein großzügigeres Trinkgeld von 20% = 4,69 USD hinterlassen.
Praktisch genug für Kreditkartenbenutzer. Aber nicht, wenn Sie lieber Bargeld-Trinkgelder abgeben möchten. In diesem Fall behindern Sie diese seltsamen Cent-Beträge. Ändern wir also die Idee, um sie für Bargeldbenutzer angenehmer zu gestalten.
Ihre Aufgabe
Schreiben Sie in so wenigen Bytes wie möglich ein Programm oder eine Funktion , die als Eingabe verwendet wird:
- Preis der Mahlzeit
- Minimaler Trinkgeldanteil
- Maximaler Trinkgeldanteil
Und geben Sie einen beliebigen Trinkgeldbetrag im Bereich [Preis * Mindestprozentsatz / 100, Preis * Höchstprozentsatz / 100] aus, der die Anzahl der erforderlichen Scheine / Banknoten und Münzen minimiert.
Angenommen, die US-Währungsbezeichnungen lauten 1, 5, 10, 25, 1, 5, 10, 20, 50 und 100 US-Dollar.
Beispiel
Hier ist ein nicht-golfendes Beispielprogramm in Python:
import math
import sys
# Do the math in cents so we can use integer arithmetic
DENOMINATIONS = [10000, 5000, 2000, 1000, 500, 100, 25, 10, 5, 1]
def count_bills_and_coins(amount_cents):
# Use the Greedy method, which works on this set of denominations.
result = 0
for denomination in DENOMINATIONS:
num_coins, amount_cents = divmod(amount_cents, denomination)
result += num_coins
return result
def optimize_tip(meal_price, min_tip_percent, max_tip_percent):
min_tip_cents = int(math.ceil(meal_price * min_tip_percent))
max_tip_cents = int(math.floor(meal_price * max_tip_percent))
best_tip_cents = None
best_coins = float('inf')
for tip_cents in range(min_tip_cents, max_tip_cents + 1):
num_coins = count_bills_and_coins(tip_cents)
if num_coins < best_coins:
best_tip_cents = tip_cents
best_coins = num_coins
return best_tip_cents / 100.0
# Get inputs from command-line
meal_price = float(sys.argv[1])
min_tip_percent = float(sys.argv[2])
max_tip_percent = float(sys.argv[3])
print('{:.2f}'.format(optimize_tip(meal_price, min_tip_percent, max_tip_percent)))
Einige Beispieleingaben und -ausgaben:
~$ python tipcalc.py 23.45 15 20
4.00
~$ python tipcalc.py 23.45 15 17
3.55
~$ python tipcalc.py 59.99 15 25
10.00
~$ python tipcalc.py 8.00 13 20
1.05
a program that takes as input (stdin, command-line arguments, or GUI input box, whichever is most convenient in your language)Soll dies unsere Standardeinstellungen für Ein- und Ausgänge überschreiben? Das heißt, wäre z. B. eine Funktion zulässig, die drei Zahlen akzeptiert und das Ergebnis zurückgibt?
3.51und 3.75sind das auch gültige Ausgaben für den Testfall 23.45 15 17? Sie verbrauchen die gleiche Menge an Münzen und befinden sich ebenfalls innerhalb der Reichweite.