通訊錄查詢
0.5s 256M通訊錄做好了,資訊股長的第二份差事是查詢:老師會一直問「第 \(i\) 位同學的電話是多少?」「第 \(i\) 位同學的資料整包給我。」
請定義一個結構體 student,把一位同學的姓名、座號、電話綁成一包,並且照 14.4 成員函式 的寫法,讓它自己會讀入、自己會印出。成員與成員函式的名稱、型態、簽名都必須完全一樣:
| 成員 | 型態/簽名 | 意義 |
|---|---|---|
name |
string |
姓名(小寫英文字母) |
seat |
int |
座號 |
phone |
string |
電話(恰 \(10\) 個數字,可能以 0 開頭) |
read() |
void read() |
從 cin 依序讀入自己的姓名、座號、電話 |
print() |
void print() |
用 cout 印出一行 座號 姓名 電話(以一個空白分隔),結尾要換行 |
你只需要寫這個結構體的定義(含兩個成員函式),不用寫 main、不用 #include 任何東西——評測程式會自動在你的程式最上方加上這題需要的標頭(<iostream>、<string>)與 using namespace std;,要用其他標頭自己再 #include 即可。想把含有 main 的完整程式貼上來測試也可以,評測時會忽略你的 main。
可以直接複製下面的骨架來改:
struct student {
// 在這裡宣告三個成員
void read() {
// 讀入自己的三筆資料
}
void print() {
// 印出「座號 姓名 電話」並換行
}
};
評測程式會做的事
評測程式會 #include 你的程式,然後:
- 讀入 \(N\),宣告
vector<student> a(N),對每位同學呼叫a[i].read()讀入資料。 - 讀入 \(Q\),處理 \(Q\) 筆查詢。每筆查詢是兩個整數 \(i\)、\(k\),代表要看第 \(i\) 位同學(依輸入順序,從 \(1\) 起算)的哪一項:
| \(k\) | 評測程式做的事 |
|---|---|
| \(0\) | 呼叫 a[i-1].print(),由你的成員函式印出整包資料 |
| \(1\) | 評測程式自己印出 a[i-1].name 並換行 |
| \(2\) | 評測程式自己印出 a[i-1].seat 並換行 |
| \(3\) | 評測程式自己印出 a[i-1].phone 並換行 |
若不符合規格,編譯訊息的第一行會告訴你缺了什麼,例如 [檢查] struct student 缺少成員函式 print()。
輸入格式
(這是評測程式讀的輸入。)第一行有一個整數 \(N\)。接下來 \(N\) 行,每行依序是一位同學的姓名、座號、電話,以一個空白分隔。再下一行有一個整數 \(Q\)。接下來 \(Q\) 行,每行有兩個整數 \(i\)、\(k\),代表一筆查詢。
限制
- \(1 \le N \le 1000\)
- \(1 \le Q \le 10^4\)
- 姓名由 \(1\) 到 \(10\) 個小寫英文字母組成
- \(1 \le\) 座號 \(\le 1000\)
- 電話恰為 \(10\) 個數字(
0到9),可能以0開頭 - \(1 \le i \le N\)、\(0 \le k \le 3\)
輸出格式
輸出 \(Q\) 行,依序是每筆查詢的結果:\(k = 0\) 時是 座號 姓名 電話(以一個空白分隔),其餘是該項資料本身。
範例輸入 1
3
amy 3 0912345678
bob 7 0987654321
cathy 1 0900000000
5
2 0
3 3
1 2
3 1
1 0
範例輸出 1
7 bob 0987654321
0900000000
3
cathy
3 amy 0912345678
範例解釋 1
第 \(1\) 筆查詢 2 0:第 \(2\) 位同學是 bob,print() 印出整包 7 bob 0987654321。第 \(2\) 筆 3 3:第 \(3\) 位同學 cathy 的電話 0900000000——以 0 開頭,用 int 存會變成 900000000,所以電話是字串。第 \(3\) 筆 1 2:第 \(1\) 位同學的座號 \(3\)。