追蹤者

2018年9月6日 星期四

Python 商管程設(一) 第三周作業

題目敘述
如果你在一家零售店幫消費的客人結帳,你可能需要快速地挑出合適且數量正確的鈔票與零錢。假設客人的消費金額 aa 一定是 1 到 1000 之間的整數,而你有無限量的 500、100、50、10、5、1 這些面額的鈔票和零錢,我們希望你能依照下面的規則找錢:

你找的錢的總額要是 1000 - a1000−a。
與其給客人五張 100 元,不如給他一張 500 元;與其給客人兩個 50 元,不如給他一張 100 元……依此類推。
以下是一些範例:

如果客人消費 200 元,你應該找給他 1 張 500 元和 3 張 100 元。
如果客人消費 286 元,你應該找給他 1 張 500 元、2 張 100 元、1 個 10 元和 4 個一元。
如果客人消費 925 元,你應該找給他 1 個 50 元、2 個 10 元和 1 個 5 元。
在本題中,你將會被給予上述的整數 aa,而你要找出符合上述規則的唯一找錢方式。

輸入輸出格式
在每筆測試資料中,會有一個整數 aa 代表客人的消費金額,aa 會介於 1 到 999 之間(包含 1 跟 999)。讀入 aa 之後,你會依照題目指定的規則找出每種面額的鈔票或銅板應該要給幾張或幾個,然後由面額大至面額小依序輸出所需鈔票張數或銅板個數,但如果不應該找給客人某個面額的鈔票或銅板,就跳過該面額不要輸出。因為這樣一來可能只輸出少於 6 個數字,會不知道怎麼對應到面額,因此現在要把面額與所需張數(個數)成對地輸出,中間用一個逗點和一個空格隔開,而面額與面額之間用一個分號和一個空格隔開。



**************
CODE :
a = int(input()) # a介於1~999
tmp = 1000 - a
cnt = 0 # 計算非零面額數
p1 = tmp // 500
if p1 != 0:
cnt += 1
tmp = tmp - p1 * 500
p2 = tmp // 100
if p2 != 0:
cnt += 1
tmp = tmp - p2 * 100
p3 = tmp // 50
if p3 != 0:
cnt += 1
tmp = tmp - p3 * 50
p4 = tmp // 10
if p4 != 0:
cnt += 1
tmp = tmp - p4 * 10
p5 = tmp // 5
if p5 != 0:
cnt += 1
tmp = tmp - p5 * 5
p6 = tmp
if p6 != 0:
cnt += 1


if p1 != 0:
print("500, "+str(p1), end="")
cnt -= 1
if cnt != 0:
print("; ", end="")
else:
print("", end="")
if p2 != 0:
print("100, "+str(p2), end="")
cnt -= 1
if cnt != 0:
print("; ", end="")
else:
print("", end="")
if p3 != 0:
print("50, "+str(p3), end="")
cnt -= 1
if cnt != 0:
print("; ", end="")
else:
print("", end="")
if p4 != 0:
print("10, "+str(p4), end="")
cnt -= 1
if cnt != 0:
print("; ", end="")
else:
print("", end="")
if p5 != 0:
print("5, "+str(p5), end="")
cnt -= 1
if cnt != 0:
print("; ", end="")
else:
print("", end="")
if p6 != 0:
print("1, "+str(p6), end="")
p6 = 0
cnt -= 1
if cnt != 0:
print("; ", end="")
else:
print("", end="")

*** End Code ***
其實P6 那也可以不用判斷cnt 直接印出空白