贪婪算法_找零钱

 

贪婪算法是一种求近似解的方法,它存在如下几个问题:

1.不能保证最后的解是最优解。

2.不能求最大解或者最小解问题。

3.只能满足某些约束条件的可行解范围。

 

下面给出用贪婪算法解决找零钱这一问题的代码:

 1 #include<stdio.h>
 2 #define max 7
 3 float facevalue[max]={50,20,10,5,1,0.5,0.1};//同时是否有无该面值用于找零,也能在此处进行修改
 4 int num[max]={0};
 5 float exchange(float n)
 6 {
 7     int i;
 8     for(i=0;i<max;i++)
 9         if(n>facevalue[i]) break;
10     while(n>0&&i<max)
11     {
12         if(n>=facevalue[i])
13         {
14             n=n-facevalue[i];
15             num[i]++;
16         }
17         else if(n<0.1)//不足1毛找一毛
18         {
19             num[max-1]++;
20             break;
21         }
22         else i++;
23     }
24     return 0;
25 }
26 int main()
27 {
28     int i=0;
29     float m;
30     printf("请输入要找零的数:");
31     scanf("%f",&m);
32     exchange(m);
33     printf("\n%.2f元零钱的组成:\n",m);
34     for(i=0;i<=max;i++)
35         if(num[i]>0)
36             printf("%6.2f:%d张\n",facevalue[i],num[i]);
37             return 0;
38 }

 

posted @ 2016-03-23 21:07  新生小诺  阅读(808)  评论(0编辑  收藏  举报