找零钱·
描述我们知道人民币有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个我没有错
但他说的答案错。。。。求大神解释




