硬币问题

问题描述:

有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;

猜你喜欢

转载自blog.csdn.net/lansehuanyingyy/article/details/80100876