找零钱问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【找零钱问题】一个小孩买了价值为33美分的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币找给小孩。假设提供了数目有限的面值为25美分、10美分、5美分、及1美分的硬币。给出一种找零钱的贪心算法。
# include
using namespace std;
const int C=33; //设置商品价钱
const int M=100; //设置小孩给的钱数
const int TFNU=3; //设置25美分硬币的数量
const int TENU=3; //设置10美分硬币的数量
const int FINU=3; //设置5美分硬币的数量
const int ONNU=3; //设置1美分硬币的数量
const int NU=TFNU+TENU+FINU+ONNU; //硬币的总数量
bool findmoney(int *p,bool *q,int n,int c)
{
for(int i=0;i if(p[i]<=c&&c!=0) { q[i]=true; c-=p[i]; if(c==0) break; } if(c==0) return true; else return false; } int main() { int a[NU],i; //数组初始化,并由大到小排序 int *p=a; for(i=0;i for(i=0;i for(i=0;i for(i=0;i bool b[NU]; int c[4]={0}; //记录应找各个面值的硬币的数量 if(findmoney(a,b,NU,M-C)) { for(i=0;i if(b[i]==true) switch(a[i]) { case 25: c[0]++;break; case 10: c[1]++;break; case 5: c[2]++;break; case 1: c[3]++;break; } cout<<"找钱方案:"< } else cout<<"零钱不够"; return 0; }