Большинство приложений калькулятор чаевых просто взять фиксированный процент от цены еды. Так, например, если ваша еда стоит 23,45 долларов, вы можете оставить чаевые в размере 15% = 3,52 доллара или более щедрые чаевые в размере 20% = 4,69 доллара.
Достаточно удобно для пользователей кредитных карт. Но не так, если вы предпочитаете оставлять денежные чаевые, и в этом случае эти чудовищные суммы будут мешать. Итак, давайте изменим идею, чтобы она была более удобной для пользователей наличными.
Ваше назначение
Напишите, как можно меньше байт, программу или функцию, которая принимает в качестве входных данных:
- Стоимость еды
- Минимальный процент чаевых
- Максимальный процент чаевых
И выведите любую сумму чаевых в диапазоне [цена * min_percentage / 100, цена * max_percentage / 100], которая минимизирует количество требуемых купюр / банкнот и монет.
Предположим, что денежные номиналы в США составляют 1, 5, 10, 25, 1, 5, 10, 20, 50 и 100 долларов.
пример
Вот пример не-игры в гольф на 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)))
Некоторые примеры ввода и вывода:
~$ 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)Это предназначено, чтобы переопределить наши значения по умолчанию для входов и выходов? То есть, например, будет ли разрешена функция, которая принимает три числа и возвращает результат?
3.51и 3.75также действительные выходы для теста 23.45 15 17? Они используют одинаковое количество монет и также находятся внутри диапазона.