C6-16 · Xếp hạng có đồng hạng
Xem dạng PDFĐề
Như bài toán xuyên suốt XS-05 (mục 6.9): đọc mã và điểm của ~n~ sinh viên, tính điểm học phần bằng tinh_diem_hp của mục 5.7
~\text{điểm học phần} = \text{làm tròn}(0{,}4 \times \text{quá trình} + 0{,}6 \times \text{cuối kỳ},\ 1 \text{ chữ số thập phân}),~
rồi xếp hạng cả lớp theo điểm học phần giảm dần; bằng điểm thì mã nhỏ hơn in trước.
Khác XS-05: người bằng điểm học phần cùng hạng, và hạng kế tiếp bỏ qua số chỗ tương ứng (kiểu 1, 2, 2, 4 như bảng xếp hạng thể thao). Hai người "bằng điểm" nghĩa là điểm học phần đã làm tròn bằng nhau.
Dữ liệu vào
- Dòng 1: số nguyên ~n~.
- ~n~ dòng tiếp theo, mỗi dòng
ma diem_qt diem_ck: mã gồm đúng 8 chữ số (không trùng nhau, có thể bắt đầu bằng 0); hai điểm là số thực, viết dạng số nguyên (10) hoặc có một chữ số thập phân (10.0,7.5).
Kết quả
~n~ dòng, mỗi dòng gồm: hạng, mã, điểm học phần (đúng 1 chữ số thập phân), cách nhau một dấu cách; theo thứ tự điểm giảm dần, bằng điểm thì mã tăng dần.
Ràng buộc
- ~1 \le n \le 100~.
- ~0 \le~
diem_qt,diem_ck~\le 10~, tối đa một chữ số thập phân.
Ví dụ
Dữ liệu vào:
4
23010008 9.0 7.0
23010002 6.5 7.0
23010003 8.0 8.8
23010001 7.5 8.0
Kết quả:
1 23010003 8.5
2 23010001 7.8
2 23010008 7.8
4 23010002 6.8
Giải thích ví dụ
| Mã | ~0{,}4 \cdot qt + 0{,}6 \cdot ck~ (chưa làm tròn) | Điểm học phần | Hạng |
|---|---|---|---|
| 23010003 | 8.48 | 8.5 | 1 |
| 23010001 | 7.8 | 7.8 | 2 |
| 23010008 | 7.800000000000001 | 7.8 | 2 |
| 23010002 | 6.8 | 6.8 | 4 |
Hai sinh viên 23010001 và 23010008 cùng 7.8 nên cùng hạng 2, mã nhỏ in trước. Người kế tiếp đứng ở vị trí thứ 4 nên hạng 4 (không phải 3).
Nếu so điểm chưa làm tròn, Python thấy 7.800000000000001 > 7.8: 23010008 bị xếp trên và hai người khác hạng — sai.
Lưu ý
- Luôn so điểm đã qua
tinh_diem_hp(đãround(..., 1)), cả khi sắp xếp lẫn khi xét đồng hạng. - Hạng của người thứ ~i~ (đếm từ 1 theo thứ tự in) là ~i~ nếu điểm khác người liền trước, ngược lại bằng hạng người liền trước.
- Khóa sắp xếp
(-diem_hp, ma);reverse=Truetrên(diem_hp, ma)sẽ đảo cả thứ tự mã. - Mã là chuỗi chữ số: in nguyên 8 chữ số, kể cả số 0 ở đầu.
Nguồn trong sách: Bài C6-16, mục 6.12, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long · Mức: (****)