题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1085
题目大意:有a个1元硬币,b个2元硬币,c个5元硬币,最少无法组成哪个数。
题目分析:事实上这是一道母函数入门题,但是其实因为题目的特殊性,于是神奇地产生了一种十分巧妙的方法。其实题目答案就是a+b*2+c*5+1,但是还要考虑两种特殊的情况而已。
观察下列几组数据:
0 b c —— ans = 1;
1 0 c —— ans = 2 = 1*1+0*2;
2 0 c —— ans = 3 = 2*1+0*2;
1 1 c —— ans = 4 = 1*1+1*2+1;
2 1 0 —— ans = 5 = 2*1+1*1+0*5+1;
可以看出存在的两种特殊情况分别是:当1元硬币不存在的时候;当a*1+b*2<4的时候。
代码参考:
#include<cstdio>
int main()
{
int a, b, c;
while(~scanf("%d%d%d", &a, &b, &c) && (a+b+c))
{
if(a == 0) puts("1");//特殊情况1
else if(a+b*2 < 4) printf("%d\n", a+b*2+1);//特殊情况2
else printf("%d\n", a+b*2+c*5+1);//普通情况
}
return 0;
}