Python 獲得最少數量的貨幣硬幣方式

2021-08-28 14:37:55 字數 1612 閱讀 2375

「」"

#題目: 手中有m種的面值的錢 ,現在有一**是n的物品,求出買東西的 數量最少的組合

#第一行輸入兩個數字,第乙個數字 m ,第二個數字是 ** n

#第二行是 對應的面值的種類 :10 ,20, 50

#第三種是 對應面值的數量 ,分別是 1,10 ,1

#輸入 : 3 130

10 20 50

1 10 1

#思路 :把輸入得到後,轉變成dict 型別,獲取對應的key值,進行降序排列,然後使用 divmod 對數字取餘數

「」"

def get_all_money_kinds_and_value(dict_value, price):

sort_value_list = [*dict_value]

list1 = [int(x) for x in sort_value_list]

list1 = sorted(list1, key=int, reverse=true)

rest_value = int(price)

calculate_amount = 0

for item in list1:

print('item', item)

result_value = divmod(rest_value, item)

if result_value[0] < int(dict_value[str(item)]): # the value

rest_value = result_value[1]

calculate_amount += result_value[0]

else:

rest_value -= int(dict_value[str(item)]) * item

calculate_amount += int(dict_value[str(item)])

print('rest value',rest_value)

return calculate_amount

if __name__ == '__main__':

line0 = input()

line0 = line0.split()

money_kind = line0[0]

gift_price = line0[1]

line1 = input()

money_value_list = line1.split()

line2 = input()

money_mount_list = line2.split()

dict_money_value_and_money = {}

for item in range(int(money_kind)):

dict_money_value_and_money[money_value_list[item]] = money_mount_list[item]

money_least_amount = get_all_money_kinds_and_value(dict_money_value_and_money, gift_price)

print(money_least_amount)

#3 100

#10 20 50

#1 10 1

最少數量貨物裝箱問題

題目描述 有重量分別為3,5,7公斤的三種貨物,和乙個載重量為x公斤的箱子 不考慮體積等其它因素,只計算重量 需要向箱子內裝滿x公斤的貨物,要求使用的貨物個數盡可能少 三種貨物數量無限 輸入描述 輸入箱子載重量x 1 x 10000 乙個整數。輸出描述 如果無法裝滿,輸出 1。如果可以裝滿,輸出使用...

用最少數量的箭引爆氣球

在二維空間中有許多球形的氣球。對於每個氣球,提供的輸入是水平方向上,氣球直徑的開始和結束座標。由於它是水平的,所以y座標並不重要,因此只要知道開始和結束的x座標就足夠了。開始座標總是小於結束座標。平面內最多存在104個氣球。一支弓箭可以沿著x軸從不同點完全垂直地射出。在座標x處射出一支箭,若有乙個氣...

用最少數量的箭引爆氣球

在二維空間中有許多球形的氣球。對於每個氣球,提供的輸入是水平方向上,氣球直徑的開始和結束座標。由於它是水平的,所以y座標並不重要,因此只要知道開始和結束的x座標就足夠了。開始座標總是小於結束座標。平面內最多存在104個氣球。一支弓箭可以沿著x軸從不同點完全垂直地射出。在座標x處射出一支箭,若有乙個氣...