贪心算法找零就是现实中从最大面额开始找的思路。不代表是最优解,只是算法之一。
由于面额输入顺序不定,我先对输入的面额进行降序排序。
下面代码:
#include
#include
int main()
{
int i,j,m,n,*ns=NULL,*cn=NULL,sum=0;
printf("请输入总金额m及零钱种类n:"),scanf("%d",&m),scanf("%d",&n);
printf("请分别输入%d种零钱的面额:\n",n);
if(!(ns=(int *)malloc(sizeof(int)*n))) return 1;
if(!(cn=(int *)malloc(sizeof(int)*n))) return 1;
for(i=0;i //------------考虑输入面额顺序不定,先对面额进行降序排列(如按照降序输入,该段可删除) for(i=0;i for(j=i+1;j if(ns[j]>ns[i]) ns[j]^=ns[i],ns[i]^=ns[j],ns[j]^=ns[i]; //------------------------------------------------------------------- for(i=0;i if(m>=ns[i]) cn[i]=m/ns[i],m=m%ns[i],sum+=cn[i],printf("%d元%d张 ",ns[i],cn[i]); printf("\n最少使用零钱%d张\n",sum); return 0; }
#include
int main() {
int look(int m);
int money;
scanf("%d",&money);
{
printf("%d",look(money));
}
return 0;
}
int look(int m) {
int b[7]= {100,50,20,10,5,2,1};
if(m==0)
return 0;
else {
for(int i=0; i<7; i++) {
if(m>=b[i])
return m/b[i]+look(m%b[i]);//递归
}
}
}