iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
Software Development

C++ 三十天學習紀錄系列 第 9

【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 的組合,我們就可以分別判斷這三個情況並輸出答案囉!


上一篇
【Day8】 Introduction – while & for
下一篇
【Day 10】Introduction - Practice 2
系列文
C++ 三十天學習紀錄30

尚未有邦友留言

立即登入留言