找零钱·
描述我们知道人民币有1、2、5、10、20、50、100这几种面值。
现在给你n(1≤n≤250)元,让你计算换成用上面这些面额表示且总数不超过100张,共有几种。
比如4元,能用4张1元、2张1元和1张2元、2张2元,三种表示方法。
输入
输入有多组,每组一行,为一个整合n。
输入以0结束。
输出
输出该面额有几种表示方法。
样例输入
1
4
0
样例输出
1
3
提示
如果我告诉你,这题是用暴力穷举的方法,你能通过吗?^_^
题目链接:http://acm.tzc.
我自己的代码
程序代码:
#include"stdio.h" int f2(int n) { return n/2+1; } int f5(int n) { int su,i; for(i=0,su=0;i*5<=n;i++) su+=f2(n-i*5); return su; } int f10(int n) { int i,su; for(i=0,su=0;i*10<=n;i++) su+=f5(n-i*10); return su; } int f20(int n) { int i,su; for(i=0,su=0;i*20<=n;i++) su+=f10(n-i*20); return su; } int f50(int n) { int i,su; for(i=0,su=0;i*50<=n;i++) su+=f20(n-i*50); return su; } int f100(int n) { int i,su; for(i=0,su=0;i*50<=n;i++) su+=f50(n-i*100); return su; } int main() { int i,n,su,s; while(scanf("%d",&n),n) { s=1*(n<5)+2*(n>=5&&n<10)+3*(n>=10&&n<20)+4*(n>=20&&n<50)+5*(n>=50&&n<100)+6*(n>=100); switch(s) { case 1:su=f2(n);break; case 2:su=f5(n);break; case 3:su=f10(n);break; case 4:su=f20(n);break; case 5:su=f50(n);break; case 6:su=f100(n);break; } printf("%d\n",su); } return 0; }
思路就是穷举
我给的输入
5
4
10
11
我认为前10个我没有错
但他说的答案错。。。。求大神解释