Quản lý danh sách sinh viên
QUẢN LÝ DANH SÁCH SINH VIÊN
Mô tả bài toán
Sử dụng cấu trúc vector hoặc list trong C++ để quản lý danh sách sinh viên. Mỗi sinh viên gồm các thông tin:
- Họ và tên (
string): gồm một hoặc nhiều từ, có thể chứa dấu cách; - Tuổi (
int); - Điểm (
double), có giá trị trong đoạn [0, 10].
Hãy viết chương trình thực hiện các yêu cầu sau:
- Nhập danh sách sinh viên.
- Thống kê theo tuổi: với mỗi độ tuổi xuất hiện trong danh sách, cho biết có bao nhiêu sinh viên ở độ tuổi đó. Các độ tuổi được in theo thứ tự tăng dần.
- Sắp xếp danh sách sinh viên theo điểm giảm dần (biết rằng điểm của các sinh viên đôi một khác nhau) và in danh sách sau khi sắp xếp.
Dữ liệu vào
- Dòng đầu tiên chứa số nguyên dương
n– số sinh viên (1 ≤ n ≤ 1000). ndòng tiếp theo, mỗi dòng chứa thông tin một sinh viên theo thứ tự: họ và tên, tuổi, điểm, các trường cách nhau bởi một dấu cách. Tuổi và điểm luôn là hai giá trị cuối cùng của dòng.
Kết quả
- Phần 1 – Thống kê theo tuổi: mỗi dòng có dạng
tuổi : số_sinh_viên(có một dấu cách trước và sau dấu:), các dòng xếp theo tuổi tăng dần. - Phần 2 – Danh sách sau khi sắp xếp: in ngay sau phần 1, mỗi dòng gồm
họ_và_tên tuổi điểm, các trường cách nhau một dấu cách; điểm in với đúng 2 chữ số sau dấu phẩy thập phân.
Ví dụ
Input
5
Nguyen Van An 19 7.5
Tran Thi Binh 20 8.25
Le Minh 19 6
Pham Quang Huy 21 9.1
Do Thu Ha 20 5.75
Output
19 : 2
20 : 2
21 : 1
Pham Quang Huy 21 9.10
Tran Thi Binh 20 8.25
Nguyen Van An 19 7.50
Le Minh 19 6.00
Do Thu Ha 20 5.75
Gợi ý
- Dùng
getlineđể đọc cả dòng, sau đó tách hai trường cuối (tuổi, điểm) từ phía cuối dòng; phần còn lại là họ tên. - Có thể dùng
map<int,int>để thống kê theo tuổi (map tự sắp xếp khóa tăng dần). - Dùng
sortvới hàm so sánh tự viết (hoặclist::sort) để sắp xếp theo điểm giảm dần. - In điểm:
cout << fixed << setprecision(2) << diem;
Comments