找零钱问题.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
找零钱问题

Algorithm Design Techniques Greedy Algorithms Divide and Conquer Dynamic Programming Backtracking Algorithms Randomized Algorithms Greedy Algorithms 找零钱问题 假定有伍角、壹角、伍分、贰分和壹分共五种硬币,在给顾客找硬币时,一般都会尽可能的选用硬币个数最小的方法。例如,当要给某顾客找七角二分钱时,会给他一个伍角,2个壹角和1个贰分的硬币。 请编写一个程序,输入的是要找给顾客的零钱(以分为单位),输出的是应该找回的各种硬币数目,并保证找回的硬币数最少。 #include iostream.h int main() { int change; cout请输入要找给顾客的零钱(以分为单位); cinchange; cout找给顾客的五角硬币个数为:change/50endl; change=change%50; cout找给顾客的壹角硬币个数为:change/10endl; change=change%10; cout找给顾客的伍分硬币个数为:change/5endl; change=change%5; cout找给顾客的贰分硬币个数为:change/2endl; change=change%2; cout找给顾客的壹分硬币个数为:changeendl; return 0; } 活动安排问题 设有n个活动的集合e={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且sifi。 如果选择了活动i,则它在时间区间[si,fi]内占用资源。若区间[si,fi]与区间[sj,fj]不相交,则称活动i与活动j是相容的。也就是说,当si≥fi或sj≥fj时,活动i与活动j相容。活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合。 各活动的起始时间和结束时间存储于数组s和f中且按结束时间的非减序:f1≤f2≤…≤fn排列。如果所给出的活动未按此序排列,需重排。 template class type void greedyselector(int n, type s[ ], type f[ ], bool a[ ] ) { a[ 1 ] = true; int j = 1; for (int i=2;i =n;i+ + ) { if (s[i]=f[j]) { a[i] = true; j=i; } else a[i]= false; } } 该算法的贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。 1, 4,8,11 Divide and Conquer 找出伪币 假定有16枚硬币,其中包含一个是伪造的硬币,这枚伪币比真币要轻一些。要求找出这个伪造的硬币。 为了帮助你完成这一任务,将提供一台可用来比较两组硬币重量的仪器,利用这台仪器,可以知道两组硬币的重量是否相同。 找伪币算法 算法1:两两比较 最多通过8次比较来判断伪币的存在并找出这一伪币。 算法2:利用分治法 16枚硬币的问题就被分为两个8枚硬币(A组和B组)的问题。通过比较这两组硬币的重量,可以判断伪币是否存在。如果没有伪币,则算法终止。否则,继续在较轻的那组硬币来寻找伪币。直到最后的那个组里只有两个硬币。比较该组中两个硬币的重量,可以立即找到伪币。 最多需要4次即能找到伪币 Quicksort // 快速排序 void QuickSort(int *a, int p, int q) { if(pq) { int r=Partition(a, p, q); QuickSort(a, p, r-1); //对左半段排序 QuickSort(a, r+1, q); //对右半段排序 } } // 划分 int Partition(int *a, int p, int q) { int i=p; int j=q+1; int x=a[p]; while(true) { while(a[++i]x); while(a[--j]x); if(i=j) break; Swap(a[i], a[j]); } a[p]=a[j]; a[j]=x; return j; } Randomized Algorithms Quicksort // 随机划分 int RandomizedPartition(int *a, int p, int q) {

文档评论(0)

hhuiws1482 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档