2014年王道论坛研究生机试练习赛(二)set 2 货币问题

题目描述:

已知有面值为1元,2元,5元,10元,20元,50元,100元的货币若干(可认为无穷多),需支付价格为x的物品,并需要恰好支付,即没有找零产生。
求,至少需要几张货币才能完成支付。
如,若支付价格为12元的物品,最少需要一张10元和一张2元,即两张货币就可完成支付。

 

思路

1. 先用完全背包的思想考虑了一下, 甚至还计算2^40 个 int 相当于多大空间

2. 然后考虑到一个优化, 100 元以上的直接用 100 付就好了嘛, 然后... 这又是道水题

 

代码

#include <iostream>
#include <stdio.h>
using namespace std;
int money[10];
 
void init() {
    money[0] = 1;
    money[1] = 2;
    money[2] = 5;
    money[3] = 10;
    money[4] = 20;
    money[5] = 50;
    money[6] = 100;
}
 
int main() {
    init();
    //freopen("testcase.txt", "r", stdin);
    int p;
     
    while(scanf("%d", &p) != EOF) {
        int resVal = 0;
        for(int i = 6; i >= 1; i --) {
            if(p < money[i]) continue;
            resVal += p/money[i];
            p = p % money[i];
        }
        resVal += p;
        printf("%d\n", resVal);
    }
    return 0;
}

 

你可能感兴趣的:(set)