C10-05 · Ghép hai lớp
Xem dạng PDFĐề
Cho hai danh sách lớp liền nhau, mỗi danh sách theo khung XS-07 (dòng mã sai bị bỏ qua lặng lẽ). Ghép thành một danh sách:
- mã chỉ có ở một lớp: lấy sinh viên đó;
- mã có ở cả hai lớp (một mã trùng): giữ bản của lớp thứ nhất, bỏ bản của lớp thứ hai.
In danh sách đã ghép theo mã tăng dần, mỗi người một dòng dạng ma Ho Ten diem_hp loai (như C10-01). Dòng cuối là TRUNG k, với k là số mã trùng (kể cả khi k = 0). Chỉ mã hợp lệ (đúng 8 chữ số) mới được xét trùng: dòng mã sai đã bị bỏ khi đọc.
Dữ liệu vào
- Dòng đầu: số nguyên n1, rồi n1 dòng của lớp thứ nhất.
- Dòng tiếp: số nguyên n2, rồi n2 dòng của lớp thứ hai.
- Mỗi dòng sinh viên dạng
ma ho ten diem_qt diem_ck(như C10-01).
Kết quả
Các dòng của danh sách đã ghép theo mã tăng dần, rồi dòng TRUNG k.
Ràng buộc
- 0 ≤ n1, n2 ≤ 1000.
- Mã: 1–12 ký tự, chỉ gồm chữ số và chữ cái Latin; hợp lệ khi gồm đúng 8 chữ số. Trong mỗi lớp, các mã hợp lệ không trùng nhau (hai lớp thì có thể có mã chung).
- Họ tên: 1–10 từ, mỗi từ 1–20 chữ cái Latin không dấu, hoa thường tùy ý; giữa các phần có thể có nhiều dấu cách.
- Mỗi điểm trong đoạn [0; 10], dạng số nguyên hoặc một chữ số thập phân, dấu chấm hoặc dấu phẩy.
Gợi ý
Viết một hàm đọc một lớp rồi gọi hai lần. Kiểm mã đã có bằng tim_theo_ma (mục 8.4.2). Sắp bằng sorted với hàm khóa trả về sv["ma"] (mục 6.2.3): sorted không tự so được hai dict.
Ví dụ 1
Dữ liệu vào:
2
23010003 Le Minh Duc 8.0 8.8
23010001 Nguyen Van An 7.5 8.0
2
23010002 Tran Thi Binh 6.5 7.0
23010001 Nguyen Van An 9 9
Kết quả:
23010001 Nguyen Van An 7.8 B
23010002 Tran Thi Binh 6.8 C
23010003 Le Minh Duc 8.5 A
TRUNG 1
Ví dụ 2
Dữ liệu vào:
2
23010005 hoang gia HAN 5 3
2301004 Pham Quoc Dung 4 4
2
2301004 Pham Quoc Dung 9 9
23010004 Pham Quoc Dung 4.0 4.0
Kết quả:
23010004 Pham Quoc Dung 4.0 D
23010005 Hoang Gia Han 3.8 F
TRUNG 0
Giải thích ví dụ
- Ví dụ 1 (ví dụ của sách): mã 23010001 có ở cả hai lớp nên giữ bản của lớp thứ nhất (7,5 và 8,0 → 7,8 B), bỏ bản (9, 9) của lớp thứ hai; có 1 mã trùng. Ba mã còn lại in theo thứ tự tăng 23010001, 23010002, 23010003.
- Ví dụ 2 (bổ sung): mã
2301004(7 chữ số) xuất hiện ở cả hai lớp nhưng là mã sai, cả hai dòng đều bị bỏ nên không tính là trùng. Mã 23010004 chỉ có ở lớp thứ hai nên được lấy; sau khi sắp, 23010004 đứng trước 23010005.TRUNG 0vẫn phải in.
Nguồn trong sách: Bài C10-05, mục 10.5, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long · Mức: (***)