題目:
在檸檬水攤上,每一杯檸檬水的售價為
5
美元。
顧客排隊購買你的産品,(按賬單
bills
支付的順序)一次購買一杯。
每位顧客隻買一杯檸檬水,然後向你付
美元、
5
美元或
10
美元。你必須給每個顧客正确找零,也就是說淨交易是每位顧客向你支付
20
5
美元。
注意,一開始你手頭沒有任何零錢。
如果你能給每位顧客正确找零,傳回
,否則傳回
true
。
false
示例 1:
輸入:[5,5,5,10,20]
輸出:true
解釋:
前 3 位顧客那裡,我們按順序收取 3 張 5 美元的鈔票。
第 4 位顧客那裡,我們收取一張 10 美元的鈔票,并返還 5 美元。
第 5 位顧客那裡,我們找還一張 10 美元的鈔票和一張 5 美元的鈔票。
由于所有客戶都得到了正确的找零,是以我們輸出 true。
分析:
1、需清楚找零錢不僅要考慮面值夠不夠,還要考慮鈔票的面額,即2張10美元鈔票不能給20美元鈔票找零。
是以,我們需要針對收到的錢來進行分情況處理判斷:
①收到5美元鈔票,則直接收錢即可,不用做判斷;
②收到10美元鈔票,則需判斷是否有5美元鈔票進行找零;
③收到20美元鈔票,則需判斷是否有 “至少一張5美元鈔票以及一張10美元鈔票” 或者 “3張5美元鈔票” 進行找零;
2、需清楚continue、break的用法
用法參考了:https://baijiahao.baidu.com/s?id=1618290540843657394&wfr=spider&for=pc
def lemon(a):
i = 0
b5 = 0 #存儲5元零錢
b10 = 0 #存儲10元零錢
b20 = 0 #存儲20元零錢
while i < len(a):
if a[i] == 5: #收到5元,不用找零錢,收錢即可
b5 = b5 + 5
i = i + 1
continue #繼續下一次循環
if a[i] == 10 and b5 > (a[i]-5): #收到10元,需確定有5元零錢
b10 = b10 + 10
b5 = b5 - 5
i = i + 1
continue
elif a[i] == 20 and b5 >= 5 and b10 >= 10: #收到20元,需確定有5元、10元零錢
b10 = b10 - 10
b5 = b5 - 5
b20 = b20 + 20
i = i + 1
continue
elif a[i] == 20 and b5 >= 15: #收到20元,需確定有3張5美元鈔票零錢
b5 = b5 - 15
b20 = b20 + 20
i = i + 1
continue
else :
return('false')
break
return('ture')
運作結果:
注:本題目來源于:https://mp.weixin.qq.com/s/jaeSczaeMXfk9QlC6LfqFA
如有侵權,請聯系删除。
本題的思路以及代碼,由筆者自己思考并編寫代碼實作,如有錯誤,歡迎之處。