C5-08 · Số ngày trong thá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

Đề

Viết hàm so_ngay_trong_thang(thang, nam) trả về số ngày của tháng thang năm nam, trong đó tháng 2 dùng lại hàm la_nam_nhuan(nam) của bài C5-03 (luật ở mục 3.3: năm chia hết cho 400, hoặc chia hết cho 4 nhưng không chia hết cho 100).

Tháng 1 2 3 4 5 6 7 8 9 10 11 12
Số ngày 31 28 hoặc 29 31 30 31 30 31 31 30 31 30 31

Chương trình chính đọc T bộ test, mỗi bộ gọi hàm một lần và in kết quả.

Dữ liệu vào

  • Dòng đầu: số nguyên ~T~.
  • ~T~ dòng tiếp theo, mỗi dòng hai số nguyên: tháng và năm, cách nhau một dấu cách.

Kết quả

~T~ dòng, mỗi dòng là số ngày của tháng tương ứng.

Ràng buộc

  • ~1 \le T \le 1000~.
  • ~1 \le \text{thang} \le 12~; ~1 \le \text{nam} \le 10^9~.

Ví dụ

Dữ liệu vào:

3
2 2024
2 2025
4 2025

Kết quả:

29
28
30

Giải thích ví dụ

  • Tháng 2/2024: 2024 chia hết cho 4, không chia hết cho 100 → năm nhuận → 29 ngày.
  • Tháng 2/2025: 2025 không chia hết cho 4 → năm thường → 28 ngày.
  • Tháng 4/2025: tháng 4 luôn có 30 ngày, không phụ thuộc năm.

Bài có ba mức (***) vì phải ghép đúng hai hàm: so_ngay_trong_thang gọi la_nam_nhuan, mỗi hàm làm một việc.

Ghi chú

  • Điều kiện "tháng 4, 6, 9 hoặc 11" phải viết đủ từng vế: thang == 4 or thang == 6 or ...; viết thang == 4 or 6 or 9 or 11 thì luôn đúng (bảng 3.5).
  • "Tháng chẵn 30 ngày" chỉ đúng đến tháng 6: tháng 8, 10, 12 có 31 ngày.
  • Gọi hàm phải có ngoặc và đối số: if la_nam_nhuan(nam):, không phải if la_nam_nhuan:.
  • Truyền đối số đúng thứ tự so_ngay_trong_thang(thang, nam); đảo thứ tự thì không có thông báo lỗi nào nhưng kết quả sai (mục 5.2.2).
  • Hệ thống chỉ so kết quả in ra; yêu cầu "dùng lại la_nam_nhuan, có ít nhất ba assert" là phần giảng viên kiểm khi chấm tay.

Nguồn trong sách: Bài C5-08, mục 5.10, giáo trình "Lập trình cơ sở với Python" — TS. Nguyễn Quốc Long · Mức: (***)


Đang tải...