• 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;
    }
  • 相关阅读:
    Python基础-画菱形
    Python基础-List找重复数
    celery的使用
    linux上安装git以及使用
    python解压压缩包的几种方式
    os 和shutil模块的使用方法
    C++学习网站总结
    道德经
    使用BeautifulSoup爬取汽车之家新闻
    RPA项目所遇知识点
  • 原文地址:https://www.cnblogs.com/xinsheng/p/3577341.html
Copyright © 2020-2023  润新知