ZeroJudge K467: 分班 (Class)

文文學校希望能夠讓學生發揮各自的才能,因此打算將學生分為語文班和數理班。為了區分學生的能力,學校準備了語文相關測驗和數理相關測驗

如果學生的語文成績高於數理成績,則分配到語文ㄝ,反之則分配到數理班。

透過這樣分班方式,學校希望學生有更好的學習體驗和學習成果,可以更專注於自己擅長的領域,並且在那些領域中得到更多的挑戰。

舉例來說,假設文文學校共有五位學生,座號由 1 開始,他們的語文成績分別是 77、74、89、98 和 82,而數理成績則是 98、77、76、74 和 93。按照學校的分班方式,語文成績高於數理成績的同學將分配到語文班,因此 3 號和 4 號同學將被分配到語文班;反之,1 號、2 號、和 5 號同學將被分配到數理班。
請你設計一個程式幫忙同學順利分班。

範例測資

範例輸入範例輸出
輸入第一列為一個整數 N (1 ≤ N ≤ 1000) 表示學生人數。第二列有 N 個整數 Li (1 ≤ Li ≤ 100,1 ≤ i ≤ N),表示所有學生的語文成績。第三列有 N 個整數 Mi (1 ≤ Mi ≤ 100,1 ≤ i ≤ N),表示所有學生的數理成績。測資保證每位學生的兩科成績一定不相同輸出第一列表示語文班學生的座號,第二列表示數理班學生的座號,座號由小到大排序,且中間以一個空白隔開。若此班級沒有學生則輸出 -1
3
80 70 99
91 90 93
3
1 2
5
77 74 89 98 82
98 77 76 74 93
3 4
1 2 5
6
71 61 61 96 60 62
72 85 93 99 74 76
-1
1 2 3 4 5 6
ZeroJudge K467 範例測資

解題思路

收語文成績的時候將分數收到一個陣列中,並宣告兩個陣列 language 和 math,分別存放語文班和數學班的同學座號。

收數學成積的時候直接和語文成績陣列中的內容做比大小,並且將目前的座號存放到對應的陣列中。

輸出陣列資料前要先判斷陣列長度是否為 0,如果是 0 的話只需輸出 -1。

範例程式碼-ZeroJudge K467: 分班 (Class)

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

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N;
    cin >> N;
    vector<int>score, language, math;
    for (int i = 0; i<N; i++)
    {
        int tmp;
        cin >> tmp;
        score.push_back(tmp);
    }
    for (int i = 0; i<N; i++)
    {
        int tmp;
        cin >> tmp;
        if (tmp > score[i]) math.push_back(i+1);
        else language.push_back(i+1);
    }
    if (language.size() == 0) cout << -1;
    for (int i = 0; i<language.size(); i++)
    {
        cout << language[i] << " ";
    }
    cout << "\n";
    if (math.size() == 0) cout << -1;
    for (int i = 0; i<math.size(); i++)
    {
        cout << math[i] << " ";
    }
    cout << "\n";
}

//ZeroJudge K467
//Dr. SeanXD

發佈留言