当前位置: 首页 > 知识库问答 >
问题:

硬币更换问题(但硬币数量最少)

沈琨
2023-03-14

所以我对编码不熟悉,我得到了一个任务,我需要做一个程序,用四分之一、一角、五分和一美分给不到一美元的零钱。然而,作业希望程序打印所需的最低硬币数量(例如,如果我输入58美分,那么输出应该是“2个25美分,1个镍和3个便士”,而不是“2个25美分,0个10美分,1个镍和3个便士”。本质上,如果没有某种硬币,那么程序就不应该打印它)。我一直在想如何制作它,这样程序就不会打印任何不必要的硬币。

这就是我现在所拥有的:

amount = int(input( "Enter amount (1-99): " ))
twentyfive = amount // 25
ten = amount % 25 // 10
five = amount % 25 % 10 // 5
one = amount % 25 % 10 % 5 //1

print(twentyfive, "quarters", ten, "dimes", five, "nickels", one, "pennies")

共有3个答案

乐正迪
2023-03-14

您正在解决打印具有以下要求的列表的问题:

  • 三个以上的项目应以“”和“

例子:

  • ['1角','2个季度']'1角和2个季度'
  • ['3镍币']'3镍币'
  • ['1角','2季度','3镍币']'1角,2季度,和3镍币'
def nice_list(items):
    return ', '.join(items[:-1] + [('and ' if len(items) > 1 else '') + items[-1]])

您要解决的另一个问题是,如果数字不是1,您需要打印一个带有名词的数字,名词后面跟着一个's'。但是,令人烦恼的是,如果这个名词以'y'结尾,你想用'ies'替换它

例子:

  • “0个一角硬币”
  • “1镍币”
  • “五个季度”
  • “3便士”
def number_noun(number, noun):
    if number == 1 or not noun:
        result = noun
    else:
        result = noun + 's' if noun[-1] != 'y' else noun[:-1] + 'ies'
    return f'{number} {result}'

但是你也要避免打印任何你需要的硬币。

因此:

amount = int(input( "Enter amount (1-99): " ))
coins = [
    (amount // 25, 'quarter'), 
    (amount % 25 // 10, 'dime'),
    (amount % 25 % 10 // 5, 'nickel'),
    (amount % 25 % 10 % 5 //1, 'penny')
]
print(nice_list([number_noun(c, name) for c, name in coins]))

如果你和我一样,不喜欢硬币的数量现在与硬币的名称在同一个列表中:

amount = int(input( "Enter amount (1-99): " ))
coins = [
    amount // 25,
    amount % 25 // 10,
    amount % 25 % 10 // 5,
    amount % 25 % 10 % 5 //1
]
name = ['quarter', 'dime', 'nickel', 'penny']
print(nice_list([number_noun(c, name) for c, name in zip(coins, names)]))

赵嘉悦
2023-03-14

或者使用re

import re
amount = int(input("Enter amount (1-99): "))
twentyfive = amount // 25
ten = amount % 25 // 10
five = amount % 25 % 10 // 5
one = amount % 25 % 10 % 5 //1
s = f"{twentyfive}, quarters, {ten}, dimes, {five}, nickels, {one}, pennies"
print(re.sub('0, \w+, ', '', s))

输出:

Enter amount (1-99): 58
2, quarters, 1, nickels, 3, pennies
方鸿振
2023-03-14

动态构建消息,仅包括计数为非零的硬币。

messages = []

if quarters:
    messages.append(f"{quarters} quarters")

if dimes:
    messages.append(f"{dimes} dimes")

if nickels:
    messages.append(f"{nickels} nickels")

if pennies:
    messages.append(f"{pennies} pennies")

# print out all message parts, joined together with commas
print(", ".join(messages))

如果要在最后一个硬币金额之前显示“和”,则需要更多的逻辑

 类似资料:
  • 具体而言,问题是: 给定面额数组<代码>硬币[],每个硬币的限制数组<代码>限制[]和数量<代码>金额,返回所需的最小硬币数量,以获取<代码>金额,或者如果不可能,返回空值。另外,用溶液中使用的每个硬币的数量填充数组 这是我的解决方案: 但它一般不起作用。 我的问题是,例如,在这种情况下: 最佳解决方案是: 并且我的算法给出作为结果。换句话说,它失败了,每当在某种情况下,我将不得不使用比可能的更少

  • 问题:https://leetcode.com/problems/coin-change/ 解决方案:https://repl.it/@Stylebender/HatefulAliceBlueTransverse#index.js 我理解从“按钮式”构建dp阵列解决方案的一般概念流程,但我只是想知道关于第10行: dp[i]=数学。最小值(dp[i],1 dp[i-硬币[j]]; 当你选择当前的第

  • 动态规划变更问题(有限硬币)。我正在尝试创建一个以以下内容作为输入的程序: 输出: 输出应该是大小为1的数组,其中每个单元格代表我们需要改变单元格索引量的最佳硬币数。 假设数组的单元格位于index: 5,内容为2。这意味着为了给出5(INDEX)的变化,您需要2(单元格的内容)硬币(最佳解决方案)。 基本上,我需要这个视频的第一个数组的输出(C[p])。这与有限硬币的大区别是完全相同的问题。链接

  • 我有以下问题: 给定一个目标大小N和一些随机生成的硬币的一些面额,这些硬币存储在数组面额[]中,使用动态规划检查是否存在一个最优解决方案,该方案将使用最少的硬币填充整个目标。 这是硬币兑换问题的一个典型例子,但与现实生活中的货币不同,在现实生活中,每种面额都是经过仔细挑选的,因此可以匹配任何目标。事实并非如此。 我熟悉硬币兑换问题中使用的算法,以及如何构造一个动态规划数组来找到解决方案,但我首先如

  • 这是我关于硬币更换问题的代码,用于打印一组硬币的总方式数和目标金额 我想知道是否有任何方法可以用相同的动态规划解决方案打印这些方法(借助内部构造的表或任何其他方法) 例如,如果一组硬币是[1,3,5],目标金额是6,那么总共有4种可能的方式。[1,1,1,1,1,1,1,],[1,1,1,3],[3,3],[1,5]]我希望这种方式的列表作为输出。

  • 我正在尝试打印最小数量的硬币来进行更改,如果不可能,请打印-1 在这段代码中,变量int[]c(硬币数组)有面额,我可以用它来计算总金额。 INT总有总和,我需要拿出使用硬币(无限供应) 对于Sum:4759和Array:{3190836},正确的输出是:59,我的输出是:60 代码中有什么错误? 下面是我的递归解决方案,尝试在DP解决方案中应用相同的逻辑。这里的逻辑似乎也有问题。对于相同的输入,