题目
美术馆有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,代表需要找多少钱
q500
、q100
、q50
、q10
、q5
、q1
:各面额所需找的数量,例如 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;
结语
由 if
、else if
、else
的组合,我们就可以分别判断这三个情况并输出答案罗!
本系列文章同步发布於笔者网站 上一篇介绍了 Neutron 的网路的概念,接下来将会接续介绍 Neu...
在我写下这个标题的时候,突然感到一阵难过。 所以在文章的最前面,先好奇的问一下,你看到标题的感觉是一...
tags: 铁人赛 AWS Outposts ECS 参考资料 ECS on Outposts 限制...
大家昨天设定完Firebase有没有发现一个问题啊,要开启Google登入时,专案必须要有SHA1指...
深度学习历史 深度学习三步骤 定义一个模型 衡量函式的好坏 找到最好的函式 步骤一:定义一个模型 类...