題目敘述
每筆測資第一行有一個正整數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";
}
}
留言
張貼留言