C6-14 · Hóa đơn quán ăn
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:
Dạng bài
Ngôn ngữ cho phép
Python
Đề
Một bàn ăn gọi ~n~ món. Với mỗi món biết tên, đơn giá (nghìn đồng) và số lượng; thành tiền = đơn giá × số lượng. Lưu mỗi món thành tuple (ten_mon, thanh_tien), rồi in hóa đơn:
- các món theo thành tiền giảm dần; món bằng thành tiền thì theo tên tăng dần (so chuỗi như Python);
- dòng cuối là tổng tiền.
Sắp xếp bằng sorted(..., key=...) với hàm khóa viết bằng def (như khoa_xep_hang của XS-05, mục 6.9).
Dữ liệu vào
- Dòng 1: số nguyên ~n~.
- ~n~ dòng tiếp theo, mỗi dòng
ten_mon don_gia so_luong; tên viết liền, không dấu, chỉ gồm chữ thườnga–z, chữ số và dấu_; tên các món khác nhau.
Kết quả
- ~n~ dòng, mỗi dòng
ten_mon thanh_tien, theo thứ tự đã nêu. - Dòng cuối: tổng tiền (số nguyên).
Ràng buộc
- ~1 \le n \le 100~; tên dài 1 đến 30 ký tự.
- ~1 \le~
don_gia~\le 10^4~, ~1 \le~so_luong~\le 1000~ (số nguyên).
Ví dụ
Dữ liệu vào:
3
tra_da 5 3
rau_xao 30 2
canh_chua 60 1
Kết quả:
canh_chua 60
rau_xao 60
tra_da 15
135
Giải thích ví dụ
Thành tiền: tra_da ~5 \times 3 = 15~, rau_xao ~30 \times 2 = 60~, canh_chua ~60 \times 1 = 60~. Hai món cùng 60 nên xếp theo tên: "canh_chua" < "rau_xao". Tổng ~60 + 60 + 15 = 135~.
Khóa (-thanh_tien, ten_mon) cho đúng thứ tự này: thành phần đầu đổi dấu để tiền lớn đứng trước, bằng nhau mới so tên.
Lưu ý
reverse=Truetrên khóa(thanh_tien, ten_mon)đảo cả hai chiều — tên cũng bị xếp giảm. Chỉ đổi dấu phần tiền.- Thành tiền phải là số nguyên khi so sánh và khi in (
60, không phải60.0; so chuỗi thì"9" > "60"). - So tên theo thứ tự chuỗi của Python:
ca<ca_kho<canh,mon1<mon10<mon2.
Nguồn trong sách: Bài C6-14, 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...