前言
為什么要學演算法,因為演算法在面試程序中需要掌握演算法,很多公司面試也有演算法題,所以我們可以嘗試去解題;
今天有一個朋友(手動艾特文彬)問我,這道題該怎么理解,該怎么去得出答案,研究了一波,并開始總結演算法篇的博客;
看題目博主感覺這是一道小學的數學題,但是可以使用python來解答,
1、分析步驟
1、我們假設每種郵票有N張,面值分別是6、7、8毛;
2、此時總共的郵票就有3N張,我們通過各種排列組合來得到每種組合的面值和,可以存放一個串列;
3、然后得到該串列,里面都是可以支付的郵資面值和;
4、對該串列進行去重(為什么要去重?,因為組合出來的面值和肯定有重復的,比如6666四張六毛,888三張八毛,都會是24)
5、再對該串列進行排序,從小到大排;
6、上述串列可以得到可支付郵資的面值數,再做一次回圈篩選不在里面的,得到的數值就是不可支付的郵資了;
2、實作
a = 6
b = 7
c = 8
count = 20 # 假設每種面值的張數有20張
listcount = [] # 該串列存放可以支付郵資的面值和
for x in range(count+1) :
for y in range(count+1) :
for z in range(count+1):
num = int(a*x + b*y + c*z)
listcount.append(num)
set_1 = set(listcount) # 串列轉換成集合,去重
listcount = list(set_1) # 再轉化為串列
listcount.sort() # 串列進行排序
print(listcount) # 列印串列
# 再將不可支付的郵資進行回圈,也存放一個串列中
notcount = []
# 下面 c*count 是指最大組合值,比如最大組合值是100,那么從1->100,依次遍歷出來,如果該值未在listcount中,可以認為該值為不可以支付郵資數
for y in range(c*count+1):
if y not in listcount :
notcount.append(y)
print(notcount)
print(notcount[-1]) # 列印不可支付郵資數的最大值
3、結果

所以 最大不可支付的郵資數為17,也就是1.7元啦啦啦!!!
有識訓記得給博主點個贊!!謝謝大家
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/254406.html
標籤:python
上一篇:linux 下pip升級報錯
