文文學校希望能夠讓學生發揮各自的才能,因此打算將學生分為語文班和數理班。為了區分學生的能力,學校準備了語文相關測驗和數理相關測驗。
如果學生的語文成績高於數理成績,則分配到語文ㄝ,反之則分配到數理班。
透過這樣分班方式,學校希望學生有更好的學習體驗和學習成果,可以更專注於自己擅長的領域,並且在那些領域中得到更多的挑戰。
舉例來說,假設文文學校共有五位學生,座號由 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 |
解題思路
收語文成績的時候將分數收到一個陣列中,並宣告兩個陣列 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