Dạng 6: Mô phỏng theo từng ngày
Trang này thuộc chuyên đề Các dạng toán thường gặp trong đề thi Tin học trẻ Bảng A.
Nhận biết dạng toán
Phần tiêu đề “Nhận biết dạng toán”Câu chuyện diễn ra qua nhiều ngày (nhiều lượt, nhiều lần biến đổi). Mỗi ngày số lượng thay đổi theo một quy tắc: chị cho em 1 viên bi, An ăn một nửa số kẹo, ngày lẻ bố cho tiền, ngày chẵn mẹ cho tiền… Câu hỏi là “sau N ngày thì thế nào” hoặc “sau bao nhiêu ngày thì đạt được điều gì”.
Kiến thức cần nhớ
Phần tiêu đề “Kiến thức cần nhớ”- Chọn biến: mỗi số thay đổi theo ngày là một biến (số bi của chị, số bi của em, số tiền…), thêm một biến đếm ngày.
- Mỗi vòng lặp là một ngày. Trong vòng lặp, cập nhật các biến đúng thứ tự đề kể.
- Chọn vòng lặp theo câu hỏi:
| Đề hỏi | Vòng lặp |
|---|---|
| Sau N ngày thì thế nào? | lặp lại (N) |
| Sau bao nhiêu ngày thì đạt…? | lặp lại cho đến khi <> và đếm số vòng |
- Ngày chẵn, ngày lẻ khác nhau: kiểm tra
<((ngày) chia lấy dư (2)) = (1)>là ngày lẻ. - Khi số ngày rất lớn (hàng tỉ), mô phỏng từng ngày phải lặp hàng tỉ vòng. Hãy tìm: lúc nào mọi thứ không thay đổi nữa (chị hết bi, An hết kẹo) để dừng sớm, hoặc chu kỳ lặp lại (mỗi 2 ngày, mỗi tuần) để nhảy cóc qua nhiều ngày một lúc.
- Chạy tay bằng bảng: mỗi dòng là một ngày, mỗi cột là một biến.
Giải mẫu 1: Chênh lệch số bi
Phần tiêu đề “Giải mẫu 1: Chênh lệch số bi”Đề thi thật: Bảng A 2023 - Vòng khu vực (miền Bắc, miền Nam), Bài 2.
Chị Cam có A viên bi, em Dino có B viên bi. Mỗi ngày chị cho em đúng 1 viên, đến khi chị hết bi thì thôi. Hỏi đến ngày thứ N, số bi hai chị em chênh nhau bao nhiêu? Nhập A, B, N trên 3 dòng (1 ≤ A, B, N ≤ 109). Ví dụ: 7, 4, 1 thì nói 1; 4, 7, 1 thì nói 5; 2, 4, 3 thì nói 6.
Cách 1 - mô phỏng từng ngày. Mỗi ngày, nếu chị còn bi thì chị bớt 1, em thêm
- Cuối cùng lấy khoảng cách giữa hai số.
khi bấm vào @greenFlag hỏi [] và đợi đặt [bi của chị v] thành (trả lời) hỏi [] và đợi đặt [bi của em v] thành (trả lời) hỏi [] và đợi đặt [số ngày v] thành (trả lời) lặp lại (số ngày) nếu <(bi của chị) > (0)> thì thay đổi [bi của chị v] một lượng (-1) thay đổi [bi của em v] một lượng (1) end end nói ([giá trị tuyệt đối v] của ((bi của chị) - (bi của em)))
Chạy tay với ví dụ 3 (A = 2, B = 4, N = 3):
| Ngày | Chị còn bi? | bi của chị | bi của em |
|---|---|---|---|
| Ban đầu | 2 | 4 | |
| 1 | Có | 1 | 5 |
| 2 | Có | 0 | 6 |
| 3 | Không | 0 | 6 |
Chênh lệch 6 − 0 = 6, đúng với đề.
Cách 2 - không cần lặp. Với N tới 109, cách 1 phải lặp một tỉ vòng. Nhìn bảng chạy tay: mỗi ngày chị cho 1 viên nhưng không thể cho quá số bi chị có, nên số bi chị đã cho là số nhỏ hơn trong hai số A và N.
khi bấm vào @greenFlag hỏi [] và đợi đặt [bi của chị v] thành (trả lời) hỏi [] và đợi đặt [bi của em v] thành (trả lời) hỏi [] và đợi đặt [số ngày v] thành (trả lời) nếu <(số ngày) < (bi của chị)> thì đặt [đã cho v] thành (số ngày) nếu không thì đặt [đã cho v] thành (bi của chị) end nói ([giá trị tuyệt đối v] của (((bi của chị) - (đã cho)) - ((bi của em) + (đã cho))))
| A, B, N | đã cho | Chị còn | Em có | Nói ra |
|---|---|---|---|---|
| 7, 4, 1 | 1 | 6 | 5 | 1 |
| 4, 7, 1 | 1 | 3 | 8 | 5 |
| 2, 4, 3 | 2 | 0 | 6 | 6 |
Giải mẫu 2: Tiết kiệm mua quà
Phần tiêu đề “Giải mẫu 2: Tiết kiệm mua quà”Đề thi thật: Bảng A 2025 - Huyện Gia Viễn, Ninh Bình, Bài 3.
Nam muốn mua một món đồ chơi giá N đồng nên tiết kiệm tiền bố mẹ cho. Ngày thứ nhất bố cho Nam X đồng, ngày thứ hai mẹ cho Y đồng, ngày thứ ba bố cho X đồng… cứ ngày lẻ bố cho X đồng, ngày chẵn mẹ cho Y đồng. Hỏi sớm nhất sau bao nhiêu ngày Nam có ít nhất N đồng để mua món đồ chơi? Nhập X, Y, N trên 3 dòng (X, Y, N < 109). Ví dụ: X = 5, Y = 2, N = 6 thì nói 2; X = 5, Y = 2, N = 15 thì nói 5.
Cách 1 - mô phỏng. Đề hỏi “sau bao nhiêu ngày” nên dùng
lặp lại cho đến khi <>: lặp cho đến khi số tiền không còn nhỏ hơn
N, mỗi vòng là một ngày.
khi bấm vào @greenFlag hỏi [] và đợi đặt [tiền bố cho v] thành (trả lời) hỏi [] và đợi đặt [tiền mẹ cho v] thành (trả lời) hỏi [] và đợi đặt [giá đồ chơi v] thành (trả lời) đặt [ngày v] thành (0) đặt [tiền v] thành (0) lặp lại cho đến khi <không phải <(tiền) < (giá đồ chơi)>> thay đổi [ngày v] một lượng (1) nếu <((ngày) chia lấy dư (2)) = (1)> thì thay đổi [tiền v] một lượng (tiền bố cho) nếu không thì thay đổi [tiền v] một lượng (tiền mẹ cho) end end nói (ngày)
Chạy tay với X = 5, Y = 2, N = 15:
ngày | Ai cho | tiền | Đủ 15 chưa? |
|---|---|---|---|
| 1 | Bố, 5 | 5 | Chưa |
| 2 | Mẹ, 2 | 7 | Chưa |
| 3 | Bố, 5 | 12 | Chưa |
| 4 | Mẹ, 2 | 14 | Chưa |
| 5 | Bố, 5 | 19 | Đủ, nói 5 |
Cách 2 - nhảy cóc theo từng cặp ngày. Nếu X = Y = 1 và N gần 109 thì cách 1 phải lặp gần một tỉ vòng. Nhưng cứ 2 ngày Nam lại có thêm đúng (X + Y) đồng. Ta nhảy qua các cặp ngày trọn vẹn mà Nam vẫn chưa đủ tiền:
- Số cặp đó là làm tròn xuống của ((N − 1) ÷ (X + Y)), vì sau các cặp này số tiền không quá N − 1, tức là vẫn thiếu.
- Thêm một cặp nữa thì số tiền vượt N − 1, tức là đủ. Vậy sau khi nhảy cóc, chỉ cần mô phỏng nhiều nhất 2 ngày nữa.
khi bấm vào @greenFlag hỏi [] và đợi đặt [tiền bố cho v] thành (trả lời) hỏi [] và đợi đặt [tiền mẹ cho v] thành (trả lời) hỏi [] và đợi đặt [giá đồ chơi v] thành (trả lời) đặt [số cặp v] thành ([làm tròn xuống v] của (((giá đồ chơi) - (1)) / ((tiền bố cho) + (tiền mẹ cho)))) đặt [ngày v] thành ((số cặp) * (2)) đặt [tiền v] thành ((số cặp) * ((tiền bố cho) + (tiền mẹ cho))) lặp lại cho đến khi <không phải <(tiền) < (giá đồ chơi)>> thay đổi [ngày v] một lượng (1) nếu <((ngày) chia lấy dư (2)) = (1)> thì thay đổi [tiền v] một lượng (tiền bố cho) nếu không thì thay đổi [tiền v] một lượng (tiền mẹ cho) end end nói (ngày)
Chương trình giống cách 1, chỉ khác là ngày và tiền không bắt đầu từ 0 mà
bắt đầu từ chỗ đã nhảy cóc tới. Với ví dụ X = 5, Y = 2, N = 15:
| Bước | Tính | Kết quả |
|---|---|---|
| Số cặp | làm tròn xuống của (14 ÷ 7) | 2 |
| Nhảy cóc | 2 cặp = 4 ngày, 2 × 7 = 14 đồng | hết ngày 4, có 14 đồng |
| Vòng lặp | ngày 5 bố cho 5 đồng, có 19 đồng | đủ, nói 5 |
Bài tập
Phần tiêu đề “Bài tập”Độ khó: 🌶️ dễ, 🌶️🌶️ trung bình, 🌶️🌶️🌶️ khó. Dòng “Đề thi thật” cho biết bài lấy từ đề nào (bấm vào để xem nguyên đề). Các đề bài được viết gọn lại, tuy nhiên vẫn giữ nguyên yêu cầu và ví dụ của đề gốc.
Bài 6.1: Máy bắn bi 🌶️🌶️
Phần tiêu đề “Bài 6.1: Máy bắn bi 🌶️🌶️”Đề thi thật: Bảng A 2025 - Vòng sơ khảo TP Hà Nội, Bài 2.
Máy bắn lần lượt A viên bi đỏ rồi B viên bi xanh, rồi lại A viên đỏ, B viên xanh… Trong N viên đầu tiên có bao nhiêu viên đỏ? Nhập A, B, N trên 3 dòng (A, B ≤ 105; N ≤ 109; 70 điểm có A, B, N ≤ 100).
| Nhập | Nói ra | Giải thích |
|---|---|---|
329 | 6 | Đ Đ Đ X X Đ Đ Đ X. |
114 | 2 | Đ X Đ X. |
238 | 4 | Đ Đ X X X Đ Đ X. |
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 6.2: Mỗi ngày ăn một nửa số kẹo 🌶️🌶️
Phần tiêu đề “Bài 6.2: Mỗi ngày ăn một nửa số kẹo 🌶️🌶️”Đề thi thật: Bảng A 2026 - Tỉnh Bắc Ninh, Bài 2.
An có N viên kẹo. Mỗi ngày An ăn nhiều nhất có thể nhưng không quá một nửa số kẹo đang có; nếu chỉ còn đúng 1 viên thì An ăn nốt. Hỏi đến hết ngày thứ K, An đã ăn tổng cộng bao nhiêu viên? Nhập N, K trên 2 dòng (1 ≤ N, K ≤ 1012).
| Nhập | Nói ra | Giải thích |
|---|---|---|
103 | 8 | Ăn 5 (còn 5), ăn 2 (còn 3), ăn 1 (còn 2). |
510 | 5 | An ăn hết kẹo sau vài ngày. |
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 6.3: Máy biến đổi số 🌶️🌶️
Phần tiêu đề “Bài 6.3: Máy biến đổi số 🌶️🌶️”Đề thi thật: Bảng A 2024 - Quận Nam Từ Liêm, Hà Nội, Câu 4.
Với số K: nếu K chia hết cho 6 thì thay K bằng K ÷ 6, nếu không thì thay K bằng 3 × K. Cần bao nhiêu lần biến đổi để K bằng 1? Nếu không thể thì nói −1. Nhập K (1 ≤ K ≤ 109).
| Nhập | Nói ra | Giải thích |
|---|---|---|
12 | 3 | 12 → 2 → 6 → 1. |
10 | -1 |
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 6.4: Truyền tin qua các trạm 🌶️🌶️
Phần tiêu đề “Bài 6.4: Truyền tin qua các trạm 🌶️🌶️”Đề thi thật (phỏng theo): Bảng A 2026 - Thành phố Hồ Chí Minh (Bán kết), Bài 1.
Giá trị dữ liệu đi qua K trạm, mỗi trạm biến đổi giá trị cũ thành (giá trị cũ ÷ 2 − 3). Biết giá trị nhận được ở trạm cuối là N, tìm giá trị ban đầu. Nhập N (1 ≤ N ≤ 20) và K (1 ≤ K ≤ 40) trên 2 dòng. (Đề gốc cho K tới 1000, khi đó kết quả quá lớn so với số Scratch tính chính xác được.)
| Nhập | Nói ra | Giải thích |
|---|---|---|
83 | 106 | Tính ngược: (8 + 3) × 2 = 22; (22 + 3) × 2 = 50; (50 + 3) × 2 = 106. |
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Liên hệ tác giả
Phần tiêu đề “Liên hệ tác giả”Thầy cô và các em muốn mua bộ bài giải và code của các bài tập trong chuyên đề này vui lòng liên hệ tác giả qua Zalo 0972465159 hoặc Facebook. Bộ bài giải được tặng miễn phí cho thầy cô đã mua 7 chuyên đề Scratch hoặc 150 bài tập Scratch. Xin cảm ơn.