ZeroJudge D150: Shopaholic

題目敘述

每筆測資第一行有一個正整數T,代表接下來會有T筆資料。每筆資料第一行會有一個正整數N,下一行會有N個正整數代表N個商品的價錢。商品是買二送一,省下來的錢會是最便宜的那個商品之價錢。要求輸出可以省下的最多費用。


範例輸入 #1

1

6

400 100 200 350 300 250


範例輸出 #1

400


解題思路

將每個商品的價錢收到一個Vector或陣列中,收完之後使用Sort來排序。再來跑For迴圈,從最大跑到最小,以每三個為單位,並將目前位置減2的價錢加到答案中。

解題程式碼如下 (僅供參考):

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int T;
    cin >> T;
    for (int i = 0; i<T; i++)
    {
        int N;
        cin >> N;
        vector<int>num;
        for (int j = 0; j<N; j++)
        {
            int tmp;
            cin >> tmp;
            num.push_back(tmp);
        }
        sort(num.begin(), num.end());
        int ans = 0;
        for (int j = N-1; j>=0; j--)
        {
            if (j - 2 < 0) break;
            else
            {
                ans += num[j-2];
                j -= 2;
            }
        }
        cout << ans << "\n";
    }
}

留言