如果只有160张钞票,我试图找到多少10和50美元钞票进入1760美元.我想,在朋友的帮助下,使用嵌套的for循环是最好的方法,但我遇到了实现问题.我的想法是逐个迭代每个x直到160,如果那么等式!= 1760,我将y递增1并重新启动.
这些都是公式:
10x + 50y = 1760,
x + y = 160
我想要的输出是:10(156) + 50(4) = 1760.但到目前为止,我所得到的只是:
10(1) + 50(0) = 10
10(2) + 50(1) = 70
10(3) + 50(2) = 130
10(4) + 50(3) = 190
10(5) + 50(4) = 250
...
...
...
10(156) + 50(30) = 3060
10(157) + 50(30) = 3070
10(158) + 50(30) = 3080
10(159) + 50(30) = 3090
10(160) + 50(30) = 3100
Run Code Online (Sandbox Code Playgroud)
由于某种原因,当x = 31时,y停留在30开始.我不知道为什么.无论如何,这是我的代码:
for i in range(1, 161):
print("10" + "(" + str(i) + ") + 50" + "(" + str(y) + ")" + " = " + str((10*i)+(50*y)))
if ((10*i)+(50*y) < 1760):
y += 1
Run Code Online (Sandbox Code Playgroud)
我不想要确切的答案.我只是想知道我哪里出错了.
为什么你y会“卡在”30岁:
一旦总和超过 1760,就不会像往常一样y再次增加。这发生在和 处,这就是为什么你的值“卡在”30 处。(10*x + 50*y) < 1760Falsex=31y=30y
您的方法几乎完成,但逻辑中有一个小错误:
您可以将 10 张钞票累加x到 160,然后直接设置 50 张钞票的金额,y而不是仅在金额超过所需金额时将 10 张钞票 累加到 160,然后将 50 张钞票 累加 1在每次迭代中都是y = 160 - x. 这是因为您强制执行此条件 ( 160 = x + y),因此仅需要考虑满足此要求的配置。
所以,你是对的,你只需要一个for循环,但你可以在每次迭代中直接设置y为160 = x + y,然后你只需要检查金额是否正确。
所以这个解决方案的Ansatz看起来像这样:
for x in range(0, 161):
y = 160 - x
# calculate the sum
# if the sum is correct, break
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |