Більшість додатків для підрахунків чайових просто приймають рівний відсоток від ціни на їжу. Так, наприклад, якщо ваш прийом їжі становить 23,45 долара, ви можете залишити чайову на 15% = 3,52 долара або більш щедру 20-ти чайову = 4,69 долара.
Досить зручно для користувачів кредитних карт. Але це не так, якщо ви віддаєте перевагу залишити грошові поради, і в цьому випадку ці дивні центри перешкоджають. Тож давайте модифікуємо ідею, щоб бути зручнішою для готівкових користувачів.
Ваше завдання
Напишіть у якомога менше байтах програму чи функцію, яка приймає як вхід:
- Ціна їжі
- Мінімальний відсоток чайових
- Максимальний відсоток чайових
І вивести будь-яку суму чайових в межах [ціна * min_percentage / 100, ціна * max_percentage / 100], що мінімізує кількість необхідних купюр / банкнот та монет.
Припустимо грошові номінали США 1 ¢, 5 ¢, 10 ¢, 25 ¢, 1 1, 5,, 10,, 20 50, 50 and і 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? Вони використовують однакову кількість монет, а також знаходяться в межах асортименту.