[问答题]
给你一个题目,请描述思路和关键代码实现:给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。
T caseamt() {
    int num = 0;
    T amtt = this->amt;
    if (this->amt < 0) {
        cout << "00,buzai jinx ji s" << endl;
        return this->amt;
    }
    for (int i = 0; i < numMax; i++) {
        if (amtt % yb1[i] >= 0) {

            num +=(int) (amtt / yb1[i]);
            if (amtt % yb1[i] == 0) {
                cout <<"i:" << i << "--yao:" << num << endl;
                return num;
            }
            amtt = amtt % yb1[i];
        }

    }
    cout << "yaoshengyu:" << num << endl;
    if (amtt > 0) {
        cout << "sheng yu:" << amtt;
        return amtt;
    }
    return num;

}
发表于 2024-05-25 00:06:35 回复(0)
思路:硬币从面额高到低进行选取,尽量多选面额高的硬币,每次选了币都要让总金额减少,并且累加硬币总数;当剩余总金额小于一枚硬币的此时面额,则选取次大面额的硬币,然后重复上述操作,直到剩余总金额减少到0. 关键代码: int shushu(int num,int amount){ // num是不同面额硬币的种类数 int coins[num],count=0,zs=num; for(int i=0;i<num>>coin[i]; sort(coins,coins+num); while(amount>0){ count=count+amount/coins[zs]; amount=amount%coins[zs];zs--; } return count; } </num>
发表于 2024-03-29 11:11:08 回复(0)