假设有数目不限的面值为20,10,5,1的硬币。
给出需要找零数,求出找零方案,要求:使用数目最少的硬币。
对于此类问题,贪心算法采取的方式是找钱时,总是选取可供找钱的硬币的最大值。比如,需要找钱数为25时,找钱方式为20+5,而不是10+10+5。
/*
* m[ ]:存放可供找零的面值,降序排列
* k:可供找零的面值种类数 ,即m[ ]的长度
* n:需要找零数
*/
#include<stdio.h>
void getmoney(int m[],int k,int n){
int i;
for( i=0;i<k;i++)
{
while(n>=m[i])
{
printf("%d ",m[i]);
n=n-m[i];
}
}
printf("\n");
}
int main(){
int n;
scanf("%d",&n);
int money[]={20,10,5,1};
int k;
k=sizeof(money)/sizeof(int);
getmoney(money,k,n);
}