找零钱问题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

相关文档
最新文档