文档介绍:找零钱问题的贪心算法
问题描述:
当前有面值分别为2角5分,1角,5分,1分的硬币,请给出找n分钱的最佳方案(要求 找出的硬币数目最少)
问题分析:
根据常识,我们到店里买东西找钱时,老板总是先给我们最大面值的,要是不够再找面值小
Y=(int)(100*X)+Z;
fbi(a=0;a<6;a-H-)
{
Coins[a]=Comsbackup[a];
}
wliile(Coiiis[m]==0||Y<Com_Face[m])( m-;)
while(Coiiis[m]!=0&&Y>=Coin_Face[m]&&m!=-l)
{Y=Y-Coin_Face[m];
Coms[m]=Coins[m]-l;
n=n-l;
if (Y=O&&n=O) goto loopl;
else if((Y==0&&n!=0)||(Y!=0&&n==0)) (b=b+l;goto loop3;) while(Coiiis[m]==011Y<Com_Face[m]){ m-;if(m<0) break;}
}
} break;
loop4: case 2: m=5;n=ij;
fbi(b;b<ll;b++)
{
Z=back2[b];
Y=(int)(100*X)+Z;
fbi(a=0;a<6;a-H-)
{
Coins[a]=Comsbackup[a];
}
wliile(Coiiis[m]==0||Y<Com_Face[m])( m-;)
while(Coiiis[m]!=0&&Y>=Coin_Face[m]&&m!=-l)
(Y=Y-Com_Face[m];
Coms[m]=Coins[m]-l;
n=n-l;
if (Y=0&&n=0) goto loopl;
else if((Y==0&&n!=0)||(Y!=0&&n==0)) (b=b+l;goto loop4;)
while(Coiiis[m]==011Y<Com_Face[m]){ m-;if(m<0) break;}
} ) break;
loop5: case 3: m=5;n=ij;
fbi(b;b<13;b++)
Z=back3[b];
Y=(int)(100*X)+Z;
fbi(a=0;a<6;a-H-)
{
Coins[a]=Comsbackiip[a];
}
wliile(Coiiis[m]==0||Y<Com_Face[m])( m-;)
while(Coiiis[m]!=0&&Y>=Coin_Face[m]&&m?=-l)
(Y=Y-Com_Face[m];
Coms[m]=Coins[m]-l;
n=n-l;
if (Y=O&&n=O) goto loopl;
else if((Y==0&&n!=0)||(Y!=0&&n==0)) (b=b+l;goto loop5;} while(Coiiis[m]==011Y<Com_Face[m]){ m-;if(m<0) break;}
}
} break;
loop6: case 4: m=5;n=ij;
fbr(b;b<8;b-H-)
{
Z=back4[b];
Y=(int)(100*X)+Z;
fbi(a=0;a<6;a