btvn.vn
Tìm kiếm Đăng nhập

Sắp kết quả giảm mà không làm lệch dữ liệu

Lưu trên thiết bị này
Kĩ thuật lập trình — CS · Chọn bài khác

Sắp bản ghi thay vì sắp riêng từng dãy

Bài luyện tập yêu cầu `ketqua.out` ghi vận động viên theo **điểm tổng hợp giảm dần**. Nếu chỉ sắp dãy điểm, mã sẽ gắn nhầm với người khác. Hãy ghép mỗi vận động viên thành một bản ghi `(mã, dãy điểm gốc, điểm tổng hợp)`, rồi sắp các bản ghi theo trường điểm. Với dữ liệu SGK, thứ tự là `200 9.14`, `901 9.06`, `045 8.71`, `101 7.77`, `003 7.08`. Khi bằng điểm, cách sắp dưới đây giữ thứ tự xuất hiện ban đầu; đề bài không quy định cách phá hòa.

Một phép sắp cho cả ba trường

```python def sap_ket_qua(ma, bang_diem, ket_qua): if len(ma) != len(bang_diem) or len(ma) != len(ket_qua): raise ValueError("Ba dãy phải cùng độ dài") ban_ghi = list(zip(ma, bang_diem, ket_qua)) ban_ghi.sort(key=lambda hang: hang[2], reverse=True) return ban_ghi ma = ["101", "200", "003"] bang_diem = [[8, 9, 7], [9, 9, 9], [7, 7, 7]] ket_qua = [7.8, 9.0, 7.0] for ma_so, diem_goc, diem_chung in sap_ket_qua(ma, bang_diem, ket_qua): print(ma_so, f"{diem_chung:.2f}") ``` Kết quả là ba dòng `200 9.00`, `101 7.80`, `003 7.00`. Để ghép vào chương trình bài trước, sau bước tính gọi `sap_ket_qua`; rồi ghi mã và điểm tổng hợp từ từng bản ghi đã sắp. Bản ghi vẫn chứa `diem_goc` để có thể đối chiếu, dù tệp đầu ra của nhiệm vụ này chỉ cần mã và điểm tổng hợp.

Bài luyện

Vì sao không sắp riêng dãy `ket_qua`?
Chọn một đáp án

Bài luyện

Với điểm `[7.8, 9.0, 7.0]` ứng với mã `["101","200","003"]`, mã nào lên đầu?
Chọn một đáp án

Bài luyện

Khi hai vận động viên bằng điểm, mã của cách sắp trong ví dụ giữ thứ tự nào?
Chọn một đáp án

Đang học