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