python整钱换零钱_一知半解讲Python第二季:7.钞票兑换

博客探讨了如何使用Python解决将整百元钞票兑换成10元、20元和50元钞票的问题,通过不同的算法思路,从最初的三层循环穷举法到逐步优化减少循环次数,再到最后的数学公式求解,展示了问题解决的演进过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一道让我怀疑人生的题

CCF NOI1034 钞票兑换。

时间限制: 1000 ms 空间限制: 262144 KB

题目描述

将任意给定的整百元钞票,兑换成10元、20元、50元小钞票形式。输出兑换方案总数。

输入

输入需要兑换的钞票总数n。

输出

输出方案总数。

样例输入

100

样例输出

10

数据范围限制

100

看到这题我第一反应就是穷举了,于是稍加思考,一个三层循环的代码就出现了,提交吧。结果如下:

点开数据一看:5410000这个测试超时。

先看看代码吧

#coding:cp936

print('''将任意给定的整百元钞票,

兑换成10元、20元、50元小钞票形式。输出兑换方案总数。''')

n=int(input("请输入100的整数倍的钱数:"))

sum=0

for i in range(0,n//10+1,1):

for j in range(0,n//20+1,1):

for k in range(0,n//50+1,1):

if i*10+j*20+50*k==n:

sum=sum+1

print("共有",sum,"种方案。")

input()

(ps:oj.noi.cn不支持Python,这是我转写的,注意 n//10这里必须用//,表示整除,/计算结果为float类型,而循环终止值要求必须整型)

好吧,知道了超时,就想到了循环次数可能多了,那就减吧。

别告诉我你写的话n//10、n//20、n//50都写成n了。那就和我一样了。上面的代码思路是我第一次减次数时想到的。但不行开始写这篇文章时我测试的这个数据,现在都跑了10多分钟了还没出结果。想象一下它会执行多少次循环吧。5410000/10*5410000/20*5410000/50=15834042100000000

1万5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值