例:有币值分别为25分,10分,1分的硬币,需找零30分,怎样找零所需硬币数目最少?
#include <stdio.h>
//找硬币:对25,10,1分钱,找30分钱。
void js1(int,int,int,int);
void js2(int,int,int);
void js3(int,int);
void bdx (void);
int i1[3]={0,0,0};
int i2[2]={0,0};
int i3=0,f1,f2,f3;
int main (){
int z,z2,z3;
printf("请输入找钱金额:");
scanf("%d",&z);
printf("从大到小输入硬币金额(分):");
scanf("%d%d%d",&f1,&f2,&f3);
js1(z,f1,f2,f3);
js2(z,f2,f3);
js3(z,f3);
bdx();
//printf("%d %d %d",i2[1],i2[2]);
}
void js1(int z,int f1,int f2,int f3){
//printf("%d %d %d %d %d\n",z,i[1],i[2],i[3],i[4]);
if(z>=f1&&z>0){
i1[0]++;
z-=f1;
}else if(z>=f2&&z>0){
i1[1]++;
z-=f2;
}else if(z>=f3&&z>0){
i1[2]++;
z-=f3;
}
if(z!=0){
js1(z,f1,f2,f3);
}
}
void js2(int z,int f2,int f3){
if(z>=f2&&z>0){
i2[0]++;
z-=f2;
}else if(z>=f3&&z>0){
i2[1]++;
z-=f3;
}
//printf("%d %d %d %d %d\n",z,i2[1],i2[2],f2,f3);
if(z!=0){
js2(z,f2,f3);
}
}
void js3(int z,int f3){
//printf("%d %d %d %d %d\n",z,i[1],i[2],i[3],i[4]);
if(z>=f3&&z>0){
i3++;
z-=f3;
}
if(z!=0){
js3(z,f3);
}
}
void bdx(void){
int a=i1[0]+i1[1]+i1[2];
int b=i2[0]+i2[1];
int c=i3;
/*printf("%d %d %d\n",i1[1],i1[2],i1[3]);
printf("%d %d\n",i2[0],i2[1]);
printf("%d %d %d",a,b,c);*/
if(a<b&&a<c){
printf("%d分%d枚,%d分%d枚,%d分%d枚",f1,i1[0],f2,i1[1],f3,i1[2]);
}
if(b<a&&b<c){
printf("%d分%d枚,%d分%d枚",f2,i2[0],f3,i2[1]);
}
if(c<=b&&c<=a){
printf("%d分%d枚",f3,i3);
}
}