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

Sắp cặp dữ liệu rồi ghi ba cao, ba thấp

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

Không tách rời tên khỏi doanh số

Giả sử `P = ["Táo", "Mơ", "Lê", "Cam", "Ổi", "Na"]` và `S = [1200, 900, 1000, 1500, 700, 1100]`. Khi sắp tăng theo `S`, mỗi phép đổi chỗ phải thực hiện trên cả `P` và `S`. Hai dãy sau sắp là `P = ["Ổi", "Mơ", "Lê", "Na", "Táo", "Cam"]` và `S = [700, 900, 1000, 1100, 1200, 1500]`. Ba cao nhất là Cam, Táo, Na; ba thấp nhất là Lê, Mơ, Ổi nếu viết mỗi nhóm theo doanh số giảm như ví dụ SGK. Điều kiện đầu vào là **ít nhất sáu mặt hàng** để hai nhóm ba hàng không trùng nhau.

Sắp xếp chèn và ghi báo cáo

```python def sap_cap(P, S): for i in range(1, len(S)): j = i while j > 0 and S[j] < S[j - 1]: S[j], S[j - 1] = S[j - 1], S[j] P[j], P[j - 1] = P[j - 1], P[j] j -= 1 def ghi_bao_cao(ten_tep, P, S): if len(P) != len(S) or len(P) < 6: raise ValueError("Cần ít nhất 6 cặp mặt hàng–doanh số") with open(ten_tep, "w", encoding="utf-8") as f: for i in range(len(S) - 1, len(S) - 4, -1): print(P[i], f"{S[i]:.2f}", file=f) for i in range(2, -1, -1): print(P[i], f"{S[i]:.2f}", file=f) P = ["Táo", "Mơ", "Lê", "Cam", "Ổi", "Na"] S = [1200, 900, 1000, 1500, 700, 1100] sap_cap(P, S) ghi_bao_cao("Data.out", P, S) ``` Tệp `Data.out` có sáu dòng theo thứ tự Cam 1500.00, Táo 1200.00, Na 1100.00, Lê 1000.00, Mơ 900.00, Ổi 700.00. Muốn chạy toàn quy trình với dữ liệu tệp, thay hai phép gán `P,S` bằng `P, S = doc_du_lieu("Data.inp")` của bài trước, rồi giữ hai lời gọi cuối. Tệp đầu vào phải theo quy ước và có đủ sáu dòng hợp lệ.

Bài luyện

Khi sắp tăng theo S, nếu đổi `S[j]` với `S[j−1]` thì phải làm gì với P?
Chọn một đáp án

Bài luyện

Với sáu mặt hàng trong ví dụ, ba mặt hàng doanh số cao nhất là nhóm nào?
Chọn một đáp án

Bài luyện

Vì sao bài báo cáo ba cao và ba thấp yêu cầu ít nhất sáu mặt hàng?
Chọn một đáp án

Đang học