[Buổi 28][Kế thừa][HW] Bài 5: Học bổng qua kế thừa nhiều tầng
Học bổng qua kế thừa nhiều tầng
Bối cảnh
Xây chuỗi kế thừa Person -> Student -> ScholarshipStudent. Person giữ id; Student bổ sung GPA; ScholarshipStudent bổ sung researchPoints và communityPoints. Điểm xét học bổng score = GPA*20 + research*2 + community. Chỉ giữ ứng viên score≥S; xếp score giảm, rồi GPA giảm, rồi ID tăng.
Bài Medium yêu cầu hiểu multilevel inheritance: lớp cuối phải tái sử dụng identity từ Person và GPA từ Student, không khai báo lại các field đó.
Ở B28, mục tiêu không phải làm hierarchy càng sâu càng tốt mà là reuse đúng quan hệ is-a. State thuộc lớp cha chỉ nên tồn tại một lần và lớp con dùng lại thông qua constructor/accessor phù hợp. Khi một metric được tạo từ cả field kế thừa và field riêng, hãy xác định rõ lớp nào chịu trách nhiệm tính metric đó để tránh duplicate logic giữa base và derived.
Yêu cầu
- Ba tầng inheritance.
- Method scholarshipScore() ở lớp cuối.
- Filter score≥S.
- Sort score giảm → GPA giảm → id tăng.
- In score 2 decimals.
Input
Dòng 1 n S; n dòng id gpa research community.
Output
Danh sách hoặc NONE.
Ràng buộc
1≤n≤5000, GPA 0..4.
Ví dụ 1
Input
4 80
S1 3.5 4 5
S2 4 0 0
S3 3 10 0
S0 3.5 4 5
Output
S0 83.00 3.50
S1 83.00 3.50
S2 80.00 4.00
S3 80.00 3.00
Giải thích
S1 và S0 score83, GPA3.5; tie cuối ID S0<S1 nên S0 trước. S2 score80, S3 score80; khi score hòa, GPA S2=4 cao hơn S3=3 nên S2 trước S3. Tất cả đạt ngưỡng80.
Ví dụ này cũng kiểm tra đúng luồng kế thừa: phần state của lớp cha được khởi tạo và tái sử dụng, phần riêng của lớp con chỉ bổ sung behavior/dữ liệu cần thiết. Kết quả cuối vì thế phải phản ánh đồng thời dữ liệu inherited và dữ liệu derived, không có field nào bị khai báo lại hoặc bỏ quên.
Ví dụ 2
Input
2 100
A 4 1 1
B 3 5 5
Output
NONE
Giải thích
A score83, B score75. Ngưỡng100 nên không ai đạt, output NONE.
Ví dụ này cũng kiểm tra đúng luồng kế thừa: phần state của lớp cha được khởi tạo và tái sử dụng, phần riêng của lớp con chỉ bổ sung behavior/dữ liệu cần thiết. Kết quả cuối vì thế phải phản ánh đồng thời dữ liệu inherited và dữ liệu derived, không có field nào bị khai báo lại hoặc bỏ quên.
Thông tin học tập
- Module: M08
- Buổi: B28
- Loại bài: HOMEWORK
- Độ khó: Medium
- Concepts: multilevel inheritance, constructor chain, derived score, ranking
- Giới hạn kiến thức: B01-B28
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments