zoukankan      html  css  js  c++  java
  • 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
    ", resVal);
        }
        return 0;
    }
  • 相关阅读:
    c#线程带参数
    svn自动update到指定目录
    204. 计数质数
    178. 分数排名
    387. 字符串中的第一个唯一字符
    374. 猜数字大小
    371. 两整数之和
    350. 两个数组的交集 II
    326. 3的幂
    219. 存在重复元素 II
  • 原文地址:https://www.cnblogs.com/xinsheng/p/3577341.html
Copyright © 2011-2022 走看看