【Day 9】Introduction - Practice 1

题目
美术馆有n 种票,票价为 p1、p2、p3 直到 pn,所需张数为 x1、x2、x3 直到 xn,且身上有 t 元。题目会给定 b, 代表总共可买的张数上限,亦即 x1 和 x2 总和不可超过 b (但可以刚好等於)。如果你想买的票超过张数上限,就印出 −1;如果张数没问题但钱不够,就印出 −2;如果张数没问题而且钱也够,就印出柜台会找多少钱。

我们要用「最有效率」的方式找钱,而所谓「最有效率」的方式,即是按照面额由大到小依序找开。举例来说,现在你有 500、100、50、10、5、1 这些面额的纸钞或零钱,若所要找的钱为 683 元,则会先找 1 张 500、1 张 100,再找 1 个 50 元、3 个 10 元,最後是 3 个 1 元。若张数未超过上限且钱够找,则印出上述各面额所需数量,两两以一个逗号隔开。以找 683 元为例,请输出 1, 1, 1, 3, 0, 3。

输入输出格式

Sol
基本上这题是一个简单的for、if-else的应用,除了题目给定的n、t、b、xi、pi以外,我们还需要建立一些变数。

totalQ:全部要买的票数
totalP:全部要买的票价
change:change = t – totalP,代表需要找多少钱
q500q100q50q10q5q1:各面额所需找的数量,例如 q100 = 5 即为需要找 5 张 100 元钞票。

而这题我们可以分为三种情况:

i. 想买的票超过张数上限:印出 −1

ii. 张数没问题但钱不够:印出 −2

iii. 张数、钱都够:印出各面额需找多少数量

Pseudocode

cin >> n、t、b

for (int i = 0; i < n; i++)
    
    int xi, pi;    // 大家可以自行设定变数名称
    cin >> xi >> pi;
    totalQ += xi;
    totalP += xi * pi;

if (totalQ > b)

    印出 -1

else if (totalP > t)

    印出 -2

else 

    q500 = change / 500;
    change -= q500 * 500;

    q100 = change / 100;
    change -= q100 * 100;

    q50 = change / 50;
    change -= q50 * 50;

    q10 = change / 10;
    change -= q10 * 10;

    q5 = change / 5;

    q1 = change - q5 * 5;

    cout << q500 << ',' << q100 << ',' << q50 << ',' << q10 << ',' << q5 << ',' << q1;

结语
ifelse ifelse 的组合,我们就可以分别判断这三个情况并输出答案罗!


<<:  [DAY7]将范例上传(1)

>>:  予焦啦!虚拟记忆体启用後的除错

OpenStack Neutron 介绍 3

本系列文章同步发布於笔者网站 上一篇介绍了 Neutron 的网路的概念,接下来将会接续介绍 Neu...

[当你重要但不紧急]

在我写下这个标题的时候,突然感到一阵难过。 所以在文章的最前面,先好奇的问一下,你看到标题的感觉是一...

【Day 20】ECS on Outposts 的限制

tags: 铁人赛 AWS Outposts ECS 参考资料 ECS on Outposts 限制...

Flutter基础介绍与实作-Day19 FireBase-设定问题

大家昨天设定完Firebase有没有发现一个问题啊,要开启Google登入时,专案必须要有SHA1指...

【Day 14】深度学习(Deep Learning)

深度学习历史 深度学习三步骤 定义一个模型 衡量函式的好坏 找到最好的函式 步骤一:定义一个模型 类...