一道让我怀疑人生的题
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