初学算法,找零问题算的上是一个比较经典的问题
老师上课讲的时候潇潇洒洒,以为已经是拿下了,课下唯唯诺诺,一看,发现思路没了,真是出来混,总是要还的呀。
源码:
#include<iostream>
#include<bits/stdc++.h>
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<<"整币"<<n<<"共有"<<count<<"种找零方式"<<endl;
}
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;
}
核心思想:
假设找零的最大面额,并一推到底。