- //#include <iostream>
- //#include <queue>
- //#include <sstream>
- //#include <cctype>
- #include <bits/stdc++.h>
- using namespace std;
- // 檢查是否為正整數
- bool isPositiveInteger(const string &s) {
- if (s.empty()) return false;
- for (char c : s) {
- if (!isdigit(c)) return false;
- }
- return true;
- }
- int main() {
- string input;
- getline(cin, input); // 讀取整行輸入
-
- queue<int> tasks; // 使用佇列來存任務
- stringstream ss(input);
- string token;
- // 解析輸入
- while (getline(ss, token, ',')) {
- if (!isPositiveInteger(token)) { // 若有非正整數則輸出 error
- cout << "error" << endl;
- return 0;
- }
- tasks.push(stoi(token)); // 轉換為整數後加入佇列
- }
- long long totalReward = 0; // 儲存總報酬金
- // 開始處理任務
- while (!tasks.empty()) {
- // 早上處理最多 3 個,報酬 * 3
- for (int i = 0; i < 3 && !tasks.empty(); i++) {
- totalReward += tasks.front() * 3;
- tasks.pop();
- }
- // 中午處理最多 2 個,報酬 * 2
- for (int i = 0; i < 2 && !tasks.empty(); i++) {
- totalReward += tasks.front() * 2;
- tasks.pop();
- }
- // 晚上處理最多 1 個,報酬不加成
- if (!tasks.empty()) {
- totalReward += tasks.front();
- tasks.pop();
- }
- }
- // 輸出最終總報酬金
- cout << totalReward << endl;
- return 0;
- }
複製代碼 回復 1# may
---------------------------------------------------------------
程式說明
1. 解析輸入
透過 getline(cin, input) 讀取使用者輸入。
使用 stringstream 將輸入按照 , 分割,並逐一檢查是否為正整數。
若有非正整數,直接輸出 "error" 並結束程式。
2. 佇列處理任務
建立 queue<int> tasks 來存放任務。
每天按照早、中、晚的時段來取出任務並計算報酬:
早:最多 3 個,報酬 x3。
中:最多 2 個,報酬 x2。
晚:最多 1 個,無加成。
3. 計算報酬
每取出一個任務,就依照對應時段的加成方式來累加總報酬。
---------------------------------------------------------------
測資
測資00:基本測試
輸入
100,200,500
預期輸出
2400
說明
早上處理 100、200、500(*3)。
總報酬 = 100×3 + 200×3 + 500×3 = 2400。
測資 01:多天處理
輸入
500,400,300,200,100
預期輸出
4200
說明
第一天:早上 500、400、300(*3),中午 200、100(*2)。
總報酬 = 500×3 + 400×3 + 300×3 + 200×2 + 100×2 = 4200。
測資 02:剛好 6 個任務
輸入
50,60,70,80,90,100
預期輸出
1020
說明
第一天:早上 50、60、70(*3),中午 80、90(*2),晚上 100(*1)。
總報酬 = 50×3 + 60×3 + 70×3 + 80×2 + 90×2 + 100×1 = 1020。
測資03:大量任務
輸入
10,20,30,40,50,60,70,80,90,100,110,120
預期輸出
2790
說明
第一天:早上 10、20、30(*3),中午 40、50(*2),晚上 60(*1)。
第二天:早上 70、80、90(*3),中午 100、110(*2),晚上 120(*1)。
總報酬 = 2790。
測資 04:異常輸入
輸入
500,abc,300
預期輸出
error
說明
因為 "abc" 不是正整數,應該直接輸出 "error"。 |