ZeroJudge K513: 停車場 (Parking)

百貨公司停車場會依車子的大小設有三種類型的停車格:小型、中型以及大型停車格

其中小型停車格適合大小在 1 到 199 間的車子,中型停車格適合大小在 200 到 499 間的車子,大於等於 500 則適合停放在大型停車格中。

每間停車場都會針對不同類型車子分配不同數量的停車格。為了更有效利用場地,當一類型的停車格已滿,車子可以停放到比他大的停車格中

舉例來說:如果小型停車格停滿,小型車可以停到中型停車格的位置,但若大型停車格停滿,無法停到中型或小型停車格。

請你幫忙計算當前停車場最多可以停放的車子數量

範例測資

範例輸入範例輸出
輸入第一列有三個整數S、M、和 L (1 ≤ S ≤ 100,1 ≤ M ≤ 100,1 ≤ L ≤ 100) 代表小型、中型和大型停車格數量。
第二列有一個正整數 N (1 ≤ N ≤ 300) 表示要停車的車子數量。第三列有 N 個正整數 Xi (1 ≤ X ≤ 1000,1 ≤ i ≤ N) 表示每台車子的大小。輸入中相鄰的兩個數值以空格間隔。
輸出一數字表示最多可以停放的車子數量。
2 1 1
4
20 30 40 50
4
4 1 2
7
800 400 100 250 600 300 650
4
3 4 0
8
210 190 170 150 130 110 900 70
7

解題思路

宣告一個陣列,並將 S、M、L 收到這個陣列的第 0 個到第 2 個位置。

宣告一個 Start 的變數,如果車子為小型車則設為 0、中型車設為 1、大型車設為 2。

跑一個 For迴圈 從 Start 到 3如果 陣列[i] > 0,則將 陣列[i]– 並將答案 +1,記得要將 For迴圈 Break 掉。最後輸出答案的變數。

範例程式碼-ZeroJudge K513: 停車場 (Parking)

#include <iostream>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int arr[3] = {}, N, ans = 0;
    cin >> arr[0] >> arr[1] >> arr[2] >> N;
    for (int i = 0; i<N; i++)
    {
        int tmp, start;
        cin >> tmp;
        if (tmp <= 199) start = 0;
        else if (tmp <= 499) start = 1;
        else start = 2;
        for (int j = start; j<3; j++)
        {
            if (arr[j] > 0)
            {
                arr[j]--;
                ans++;
                break;
            }
        }
    }
    cout << ans << "\n";
}

//ZeroJudge K513
//Dr. SeanXD

發佈留言