Sebagian besar aplikasi kalkulator tip hanya mengambil persentase datar dari harga makanan. Jadi, misalnya, jika makanan Anda adalah $ 23,45, Anda dapat memberikan tip 15% = $ 3,52, atau tip 20% yang lebih murah hati = $ 4,69.
Cukup nyaman untuk pengguna kartu kredit. Tetapi tidak demikian halnya jika Anda lebih suka meninggalkan tips uang tunai, dalam hal ini jumlah aneh ini menghalangi. Jadi, mari modifikasi ide agar lebih nyaman bagi pengguna uang tunai.
Tugas Anda
Tulis, sesedikit mungkin byte, program atau fungsi yang mengambil input:
- Harga makanan
- Persentase tip minimum
- Persentase tip maksimum
Dan hasilkan jumlah tip dalam kisaran [harga * min_percentage / 100, harga * max_percentage / 100] yang meminimalkan jumlah tagihan / uang kertas dan koin yang diperlukan.
Asumsikan denominasi moneter AS sebesar 1 ¢, 5 ¢, 10 ¢, 25 ¢, $ 1, $ 5, $ 10, $ 20, $ 50, dan $ 100.
Contoh
Berikut adalah contoh program non-golf dengan 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)))
Beberapa input dan output sampel:
~$ 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)Apakah ini dimaksudkan untuk mengesampingkan default kami untuk input dan output? Yaitu, apakah mis. Suatu fungsi yang mengambil tiga angka dan mengembalikan hasilnya diizinkan?
3.51dan 3.75juga keluaran yang valid untuk kasus uji 23.45 15 17? Mereka menggunakan jumlah koin yang sama dan juga berada di dalam jangkauan.