C6-16 · Xếp hạng có đồng hạng

Xem dạng PDF

Gửi bài giải

Điểm: 1,00
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Tác giả:
Nguồn bài:
Sách "Lập trình cơ sở với Python"
Dạng bài
Ngôn ngữ cho phép
Python

Đề

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=True trê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: (****)


Đang tải...