La maggior parte delle app per calcolatori di mance prende semplicemente una percentuale fissa del prezzo del pasto. Ad esempio, se il tuo pasto è di $ 23,45, puoi lasciare una mancia del 15% = $ 3,52 o una mancia più generosa del 20% = $ 4,69.
Abbastanza conveniente per gli utenti di carte di credito. Ma non è così se preferisci lasciare delle mance in contanti, nel qual caso questi importi stranissimi si frappongono. Quindi modifichiamo l'idea per essere più conveniente per gli utenti di denaro contante.
Il tuo incarico
Scrivi, nel minor numero di byte possibile, un programma o una funzione che accetta come input:
- Prezzo del pasto
- Percentuale minima di mancia
- Percentuale massima di punta
E genera qualsiasi importo di mancia all'interno dell'intervallo [prezzo * percentuale_min / 100, prezzo * percentuale_ max / 100] che minimizza il numero di banconote / banconote e monete richieste.
Assumi le denominazioni monetarie statunitensi di 1 ¢, 5 ¢, 10 ¢, 25 ¢, $ 1, $ 5, $ 10, $ 20, $ 50 e $ 100.
Esempio
Ecco un programma di esempio senza golf 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)))
Alcuni input e output di esempio:
~$ 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)Questo ha lo scopo di sostituire i nostri valori predefiniti per ingressi e uscite? Cioè, ad esempio una funzione che accetta tre numeri e restituisce il risultato sarebbe consentita?
3.51e 3.75sono anche uscite valide per il test case 23.45 15 17? Usano la stessa quantità di monete e sono anche all'interno dell'intervallo.