问题描述:用递归实现,显示用1分、2分和5分的硬币凑成1元,一共有多少种方法。
代码:
#include<stdio.h>
int a[]={1,2,5};
int f1(int sum,int index)
{
int count=0;
if(index>2)
{
if(sum==0)
return 1;
else
return 0;
}
else
{
for(int n=0;sum-n*a[index]>=0;n++)
count+=f1(sum-n*a[index],index+1);
}
return count;
}
int f2(int sum)
{
int count=0;
for(int i=0;i<=sum/a[2];i++)
for(int j=0;j<=(sum-5*i)/a[1];j++)
{
count++;
}
return count;
}
int main()
{
int sum=100;
sum-=1+2+5;
printf("一共有%d种分法\n",f1(sum,0));
printf("一共有%d种分法\n",f2(sum));
return 0;
}
注:题目选自武大2014机试真题