我被要求在python中编写一个程序,能够在给定的金额中正确找到硬币的组合和每个硬币的数量。在这个问题中,仅使用镍和硬币。
前 - 鉴于有10个硬币,有多少镍币和硬币在0.85美元?
这就是我解决它的方法:
设置方程式:
d + n = 10
.10d + .05n = .85
解决n:
n = 10 - d
解:
.10d + .05(10-d)= .85
.05d + .5 -.05d = .85
.05d = .35
d = 7
n = 3
我将如何编程呢?
很抱歉,如果这是一个愚蠢的问题,但我对python很新,我完全迷失在这个问题上。
答案 0 :(得分:5)
让硬币数量为a
,d + 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
所以,给定a
和b
:
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个硬币组成)是无法解决的。