确定python中的硬币组合

时间:2012-01-25 22:09:30

标签: python

我被要求在python中编写一个程序,能够在给定的金额中正确找到硬币的组合和每个硬币的数量。在这个问题中,仅使用镍和硬币。

前 - 鉴于有10个硬币,有多少镍币和硬币在0.85美元?

这就是我解决它的方法:

  1. 设置方程式:

    d + n = 10
    .10d + .05n = .85

  2. 解决n:
    n = 10 - d

  3. 解:
    .10d + .05(10-d)= .85
    .05d + .5 -.05d = .85
    .05d = .35
    d = 7
    n = 3

  4. 我将如何编程呢?

    很抱歉,如果这是一个愚蠢的问题,但我对python很新,我完全迷失在这个问题上。

4 个答案:

答案 0 :(得分:5)

让硬币数量为ad + n = a

总和为b,所以0.1d + 0.05n = b

然后

n = a - d
0.1d+0.05(a-d)=b
0.05d = b-0.05a
d = 20b - a
n = a - d = a - 20b +a = 2a - 20b

所以,给定ab

d = 20b - a
n = a - d

现在我们只需要在Python中编写这两个公式。

查看官方文档中的示例:http://docs.python.org/tutorial/controlflow.html#defining-functions

def count(num, total_sum):
    d = 20*total_sum - num
    n = num - d
    return (n,d)

print count(10, 0.85)

答案 1 :(得分:2)

没有风格点,但是对所有可能性的简单搜索可以快速编写,并且足够快以达到实用目的。从所有的镍币开始,没有硬币,然后继续添加一个硬币并从镍中移除一个,直到你得到答案(或不)。

def solve(ncoins, cents):
    nickels = ncoins
    dimes = 0
    for ii in range(ncoins):
        if (nickels * 5) + (dimes * 10) == cents:
            return "{nickels} nickels, {dimes} dimes".format(
                nickels=nickels, dimes=dimes)
        nickels -= 1
        dimes += 1
    raise AssertionError("{ncoins} coins can't be {cents} cents!".format(
        ncoins=ncoins, cents=cents))

print solve(10, 85)
print solve(10, 75)
print solve(100, 75)

输出:

3 nickels, 7 dimes
5 nickels, 5 dimes
Traceback (most recent call last):
  File "/home/akg/tmp/sacoins.py", line 16, in <module>
    print solve(100, 75)
  File "/home/akg/tmp/sacoins.py", line 10, in solve
    raise AssertionError("{ncoins} coins can't be {cents} cents!".format(ncoins=ncoins, cents=cents))
AssertionError: 100 coins can't be 75 cents!

答案 2 :(得分:1)

如果您只有硬币和镍币,您可以执行以下操作:

>>> total_coins = 10
>>> nickels = 85 / 5  # 85 is the total amount in cents; 5 is the value of a nickel
>>> nickels
17
>>> dimes = 0
>>> while dimes + nickels != total_coins:
...    dimes += 1
...    nickels -= 2
... 
>>> dimes
7
>>> nickels
3
>>>

由于每一角钱有2个镍币,你可以计算出有多少镍币,并为每两个镍币添加一个镍币,直到你拥有正确数量的硬币。

答案 3 :(得分:0)

或者不是迭代可能的硬币组合,你可以使用(给定总数和数字币作为输入):

justnickels = total/.05 
numdimes = justnickels - numcoins
numnickels = numcoins - numdimes

如果您将负数作为答案之一,那么特定的组合(如.85由5个硬币组成)是无法解决的。