Python 合计金额所需的最小硬币数
这是最小硬币数,问题是 我无法处理函数返回类型为Python 合计金额所需的最小硬币数,python,Python,这是最小硬币数,问题是 我无法处理函数返回类型为None的情况。我尝试了类似于if min\u count!=无&&min\u计数=i: min_count=min_硬币(金额-i,硬币可用,计数+1) 如果min_count则更正代码以返回min_count,并在不使用全局变量的情况下重写 def min_coin(amount, coins_available): if amount == 0: return 0 # Find minimum
None
的情况。我尝试了类似于if min\u count!=无&&min\u计数=i:
min_count=min_硬币(金额-i,硬币可用,计数+1)
如果min_count则更正代码以返回min_count,并在不使用全局变量的情况下重写
def min_coin(amount, coins_available):
if amount == 0:
return 0
# Find minimum count by recursive trying each coin
min_count = 100000 # Initialze to large number
for i in coins_available:
if amount >= i:
count = 1 + min_coin(amount - i, coins_available)
if count < min_count:
min_count = count # Lower min
return min_count # need return otherwise in parent conditional
# won't work since will have 1 + None
print(min_coin(2, [1, 3])) # Output: 2
print(min_coin(3, [1, 3])) # Output: 1
print(min_coin(6, [1, 3])) # Output: 2
def minu硬币(金额、可用硬币):
如果金额=0:
返回0
#通过递归尝试每个硬币来找到最小计数
最小计数=100000#初始化为大数字
对于可用的硬币中的i,请执行以下操作:
如果金额>=i:
计数=1+最小硬币(数量-i,硬币可用)
如果计数<最小计数:
最小计数=计数#最小下限
return min_count#需要在父条件中返回,否则返回
#无法工作,因为将有1+无
打印(min_硬币(2[1,3])#输出:2
打印(min_硬币(3[1,3])#输出:1
打印(min_硬币(6[1,3])#输出:2
这是最新版本。它可以用贪婪的方法来解决,当问题有贪婪的选择时,这种方法非常有效
此算法适用于“”系统,其中每个值(在我们的示例中为硬币值)至少是前面项目值的两倍
您可以看到,如果您提供输入,比如说数量:40和可用硬币:[20,10,5,2,1]-那么它可以完美地工作
但是对于数量:40和可用硬币:[25,20,10,5,2,1]-查看我们得到了什么
def min_coin(amount, coins_available):
# Making sure your coin array is sorted in descending order
# This way we make sure to include the largest possible coin each time
coins_available.sort(reverse=True)
# Initializing our array that will hold the coins we choose
selected_coins = []
for i in range(len(coins_available)):
while (amount >= coins_available[i]):
# Evey time we pick a coin, we reduce the amount left by that coin's amount
amount -= coins_available[i]
selected_coins.append(coins_available[i])
if(amount == 0):
break;
for coin in selected_coins:
print(coin)
在这个解决方案中,我简化了一些语句并删除了不必要的变量
尽量避免使用全局变量,也可以从函数内部进行打印,否则只需返回列表并根据需要使用它
它的工作方式是寻找我们拥有的最大(价值)的硬币,然后检查我们是否可以作为零钱给它,如果可以,我们作为零钱给它,减少剩余的数量,然后再次检查。一旦剩下的钱少于最大的硬币,我们就换成第二大的
这样我们就知道我们的程序是正确的,因为底层算法是正确的。试着回答自己为什么
提示:
看看你是否可以假设解决方案是错误的,并提出一个“正确”的解决方案,如果你不能,那么它是正确的)
我希望这有助于理解。建议:重写时不使用全局,即除特殊情况外,通常不支持全局。我不会在任何地方重新运行计数器,请您在某些编解码器的帮助下解释,有人借助于解释来寻求帮助code@VaibhavYadav--添加了带有缺少return语句的更正代码。