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?
Như vậy tên và doanh số sẽ không còn khớp.
Hai trường của một mặt hàng phải đi cùng nhau.
Không được mất tên.
Chữ cái không là tiêu chí báo cáo.
Lời giải
S và P là hai dãy song song; đổi cùng cặp vị trí ở P bảo toàn mỗi mặt hàng với doanh số của 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?
Các doanh số tương ứng là 1500, 1200, 1100.
Đây là ba thấp nhất.
Ổi có doanh số thấp nhất.
Mơ và Lê không thuộc ba cao nhất.
Lời giải
Sắp doanh số tăng được 700,900,1000,1100,1200,1500; lấy ba giá trị cuối theo chiều giảm ứng với Cam, Táo, Na.
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?
Hai nhóm cần tổng cộng sáu vị trí khác nhau.
Python đọc được tệp ngắn hơn.
Mỗi mặt hàng có một doanh số.
Sắp xếp chèn dùng được với dãy ngắn.
Lời giải
Ba vị trí cao nhất và ba vị trí thấp nhất tách rời khi có ít nhất sáu phần tử.
Đang học