问题描述:
有1元,5元,10元,50元,100元,500元的硬币个C1,C2,C3,C4,C5,C6枚,用这些硬币来支付A元,最少需要多少枚硬币?
const int V[6]={1,5,10,50,100,500};
//输入
int C[6];
int A;
void solve(){
int ans=0;
for(int i=5;i>=0;i--){
int j=min(A/V[i],C[i]);
A-=j*V[i];
ans+=t;
}
printf("%d\n",ans);
}
设计巧妙点:
1.无需考虑什么特殊情况(if语句),结构完整而优美;
1 int j=min(A/V[i],C[i]);
2 A-=j*V[i];
3 ans+=t;
1:考虑取钱币和面值的比值与现有枚数的最小值;
如果前项小,那么说明已经不需要那么多钱币,该面值的钱币已获取最大枚数;
如果后项小,那么说明该面值的币依然少,往下继续取;
当出现0了,说明已经OK了,而且还保证之后的所有为0;