《算法笔记》codeup 100000584 问题 G: 找零钱

思路:

本题同问题D及问题F类似,尽可能地按面额从大到小找钱即可解决。

解答:

/*
《算法笔记》codeup 100000584 问题 G: 找零钱
*/

#include 
using namespace std;

int main() {
    int amount;                                         // 总额
    int denomination[5] = {50, 20, 10, 5, 1};           // 面额

    while (scanf("%d", &amount) != EOF) {
        for (int i = 0; i <= 4; i++) {
            if (amount < denomination[i])               // 跳到比总额小的面额
            {
                continue;
            }
            
            int num = amount / denomination[i];         // 计算总额包含多少张当前选中的面额
            int balance = amount % denomination[i];     // 计算余额

            if (num > 0)                                // 如果张数不为0,则
            {                                               
                printf("%d*%d", denomination[i], num);  // 输出
                amount = balance;                       // 置下一次需要计算的金额为余额
            }
            else                                        // 如果张数为0,则
            {
                break;                                  // 结束
            }

            if (amount > 0)                             // 如果下一次需要计算的金额不为0,则
            {
                printf("+");                            // 输出一个+
            }
        }
        printf("\n");
    }

    return 0;
}

 

你可能感兴趣的:(codeup)