初学算法,找零问题算的上是一个比较经典的问题
老师上课讲的时候潇潇洒洒,以为已经是拿下了,课下唯唯诺诺,一看,发现思路没了,真是出来混,总是要还的呀。
源码:
#include
#include
using namespace std;
int den[7]={0,1,2,5,10,20,50}; //定义分配数组
int fun(int n,int i);
int main()
{
int n;
int count=0;
cout<<"请输入整币金额:";
cin>>n;
for(int i=1;i<=6;i++)
{
count+=fun(n,i);
}
cout<<"整币"< } int fun(int n,int i) { int sum=0; int res=n-den[i]; if(res<0) { return 0; } else if(res==0) { return 1; } else { for(int j=1;j<=i;j++) { sum+=fun(res,j); } } return sum; } 核心思想: 假设找零的最大面额,并一推到底。