Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 合计金额所需的最小硬币数_Python - Fatal编程技术网

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语句的更正代码。