五、贪心

阅读: 评论:0

五、贪心

五、贪心

文章目录

  • 引例、找零钱
    • 问题描述
    • 代码及分析
          • 待解决

贪心算法,贪的就是局部最优解,首先,每一个大问题都包含着子问题的最优解,其次,每个子问题都适用贪心算法。它是自上向下的求解问题。

引例、找零钱

问题描述

金钱面额为100,50,20,10,5,2,1,0.5,0.2,0.1,共10种,求解输入一个待找零钱的总额,以上每种面额各需要几张

代码及分析

#include<stdio.h>
# define maxn 10 
long parvalue[maxn]={10000,5000,2000,1000,500,200,100,50,20,10};
int num[maxn]={0};
int exchange(long n)
{int i,j;for(i=0;i<maxn;i++){
//  if(n>parvalue[i])
//  break;while(n>0&&i<maxn) {if(n>=parvalue[i]){n-=parvalue[i];num[i]++;}else if(n<10&&n>=5){num[maxn-1]++;break;}else i++;}}return 0;
}
int main()
{int i;float m;printf("请输入找零金额:");scanf("%f",&m);exchange((long)100*m);printf("n%.2f元钱的找零方式:n",m);for(i=0;i<maxn;i++)  {if(num[i]>0)printf("面额%.1f的:%d张n",(float) parvalue[i]/100.0,num[i]);}return 0;
} 
待解决

疑问:第10、11行的代码其实可以算是冗余的,因为while循环里就有判断n是否大于当前面值金额,而且蹊跷的是不把这里两行注掉,会出现输入三位数字时不输出的情况,很迷。

本文发布于:2024-02-02 14:12:02,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170685432344329.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:贪心
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23