[Buổi 10][Đệ quy & Ngăn xếp lời gọi][HW] Bài 1: Nhật ký lời gọi Euclid
Nhật ký lời gọi Euclid
Bối cảnh và bài toán
Một bộ chẩn đoán chạy thuật toán Euclid theo dạng đệ quy gcd(a,b) -> gcd(b,a mod b) và muốn ghi nhận độ sâu xử lý. Mỗi lần hàm được gọi, kể cả lời gọi cuối cùng khi b=0, bộ đếm tăng thêm một.
Yêu cầu
Tính gcd(a,b) và tổng số lần hàm đệ quy được gọi theo đúng quy tắc trên.
Input
- Một dòng chứa hai số nguyên không âm
a b, không đồng thời bằng 0.
Output
In gcd(a,b) và số lời gọi, cách nhau bởi một dấu cách.
Ràng buộc
0 <= a, b <= 10^18a + b > 0
Chấm điểm
| Subtask | Điểm | Điều kiện | Official tests |
|---|---|---|---|
| S1 | 30% | a, b ≤ 10^4 | 01–03 |
| S2 | 30% | a, b ≤ 10^12 | 04–06 |
| S3 | 40% | Không có ràng buộc bổ sung | 07–10 |
Ví dụ 1
Input
48 18
Output
6 4
Giải thích. Các lời gọi là (48,18) -> (18,12) -> (12,6) -> (6,0).
Ví dụ 2
Input
10 0
Output
10 1
Giải thích. Lời gọi đầu tiên đã chạm base case.
Thông tin bài tập
| Thuộc tính | Giá trị |
|---|---|
| Mã bài | DSA-M04-B10-HW01 |
| Buổi | B10 |
| Loại bài | HOMEWORK |
| Mức độ khó | Dễ (Easy) |
| Thời gian làm bài khuyến nghị | 20 phút |
| Time limit | 1 giây |
| Memory limit | 256 MB |
| Tổng điểm | 100 |
| Chuẩn ngôn ngữ tham chiếu | C++11 trở lên |
Nguồn: FULLHOUSE DEV – Self-generated.
Comments