Đề thi tin học trẻ huyện Từ Sơn, tỉnh Bắc Ninh, năm 2024
Bài 1: Năm số tự nhiên
Đề bài:
Cho 5 số tự nhiên có giá trị là 1 hoặc 2. Hãy cho biết giá trị nào có số lần xuất hiện nhiều hơn.
Dữ liệu: Dữ liệu nhập vào gồm 5 dòng:
- Dòng thứ nhất ghi số tự nhiên a (1 ≤ a ≤ 2)
- Dòng thứ hai ghi số tự nhiên b (1 ≤ b ≤ 2)
- Dòng thứ ba ghi số tự nhiên c (1 ≤ c ≤ 2)
- Dòng thứ tư ghi số tự nhiên d (1 ≤ d ≤ 2)
- Dòng thứ năm ghi số tự nhiên e (1 ≤ e ≤ 2)
Kết quả: Đưa ra số có số lần xuất hiện nhiều hơn.
Ví dụ:
| Dữ liệu | Kết quả |
|---|---|
| 1 1 1 2 1 |
1 |
Hướng dẫn làm bài:
Phân tích bài toán:
- Dữ liệu đầu vào (Input): Đúng 5 con số, và các số này chỉ có thể là 1 hoặc 2.
- Kết quả đầu ra (Output): Số nào xuất hiện nhiều lần hơn.
Thuật toán:
Cách 1: Kỹ thuật đếm
- Ta chỉ cần tạo một biến đếm để đếm xem có bao nhiêu số 1.
- Lặp 5 lần quá trình nhập số: Nếu số nhập vào là 1 thì tăng biến đếm lên 1 đơn vị.
- Cuối cùng, kiểm tra biến đếm: Nếu biến đếm ≥ 3 thì chắc chắn số 1 xuất hiện nhiều hơn. Nếu không, chắc chắn số 2 xuất hiện nhiều hơn (không cần đếm số 2 mất công).
Cách 2: Tư duy toán học (Mẹo tính tổng)
- Cộng tổng cả 5 số lại với nhau.
- Trường hợp số 1 xuất hiện nhiều nhất (3 lần 1, 2 lần 2): Tổng lớn nhất có thể là 1 + 1 + 1 + 2 + 2 = 7. Các trường hợp nhiều số 1 hơn (như 4 số 1, 5 số 1) tổng sẽ còn nhỏ hơn 7.
- Trường hợp số 2 xuất hiện nhiều nhất (3 lần 2, 2 lần 1): Tổng nhỏ nhất có thể là 2 + 2 + 2 + 1 + 1 = 8.
- Kết luận:Nếu Tổng ≤ 7 thì in ra 1. Ngược lại (Tổng ≥ 8) thì in ra 2. Cách này code cực ngắn, như một “mẹo giải nhanh”.
Hướng dẫn cài đặt bằng Scratch (Theo Cách 1)
Các bước lập trình Scratch:
- Tạo một biến tên là đếm số 1.
-
Khi lá cờ xanh được nhấn:
- Đặt đếm số 1 thành 0.
-
Sử dụng vòng lặp Lặp lại 5 lần:
- Hỏi “Nhập số:” và đợi.
- Sử dụng khối điều kiện Nếu … thì: Nếu trả lời = 1, thì thay đổi đếm số 1 một lượng 1.
-
Thoát khỏi vòng lặp, dùng khối Nếu … thì … không thì:
- Nếu đếm số 1 > 2: Nói 1.
- Không thì: Nói 2.
Hướng dẫn cài đặt bằng Python
Code cách 1:
# Khởi tạo biến đếm số 1
dem_1 = 0
# Lặp 5 lần để đọc 5 dòng dữ liệu
for i in range(5):
so = int(input())
if so == 1:
dem_1 += 1
# Kiểm tra xem số 1 có xuất hiện từ 3 lần trở lên không
if dem_1 >= 3:
print(1)
else:
print(2)
Code cách 2:
tong = 0
# Tính tổng 5 số nhập vào
for i in range(5):
so = int(input())
tong += so
# Nếu tổng nhỏ hơn hoặc bằng 7 thì 1 thắng, ngược lại 2 thắng
if tong <= 7:
print(1)
else:
print(2)
Bài 2: Số đặc biệt
Đề bài:
Cho 3 số tự nhiên a, b, c. Trong đó, có một số có giá trị khác 2 số còn lại. Hãy tìm số đó.
Dữ liệu: Dữ liệu nhập vào gồm 3 dòng:
- Dòng thứ nhất chứa số tự nhiên a (1 ≤ a ≤ 109)
- Dòng thứ hai chứa số tự nhiên b (1 ≤ b ≤ 109)
- Dòng thứ ba chứa số tự nhiên c (1 ≤ c ≤ 109)
Kết quả: Một số tự nhiên là kết quả bài toán.
Ví dụ:
| Dữ liệu | Kết quả |
|---|---|
| 1 2 1 |
2 |
Hướng dẫn làm bài:
Phân tích bài toán:
- Dữ liệu đầu vào (Input): 3 số tự nhiên a, b, c. Đề bài có một giới hạn là số có thể lên tới 109 (một tỷ), nhưng cả Scratch và Python đều xử lý rất tốt con số này nên ta không cần lo lắng về hiện tượng tràn số.
- Đặc điểm cốt lõi: Luôn luôn có 2 số bằng nhau (là một cặp), và 1 số khác biệt.
- Nhiệm vụ (Output): Tìm và in ra số khác biệt đó.
Thuật toán:
- Trường hợp 1: Lấy số thứ nhất (a) so sánh với số thứ hai (b). Nếu a = b, chứng tỏ hai bạn này là một cặp “sinh đôi”, vậy kẻ “lạc loài” chắc chắn là bạn thứ ba (c).
- Trường hợp 2: Nếu a không bằng b, ta lại lấy a đi so sánh với c. Nếu a = c, thì cặp sinh đôi là a và c, kẻ lạc loài là bạn thứ hai (b).
- Trường hợp 3: Nếu cả hai trường hợp trên đều trật (nghĩa là $a$ khác b, và a cũng khác c), thì bản thân bạn a chính là kẻ “lạc loài” khác biệt so với hai bạn kia.
Hướng dẫn làm bằng Scratch:
- Tạo 3 biến tên là a, b, c.
-
Khi lá cờ xanh được nhấn:
- Hỏi “Nhập số a:” và đợi. Sau đó đặt [a] thành (trả lời).
- Làm tương tự: Hỏi và đặt [b] thành (trả lời).
- Làm tương tự: Hỏi và đặt [c] thành (trả lời).
-
Kéo khối Nếu … thì … không thì:
- Ở ô điều kiện: Lắp phép toán [a] = [b].
- Ở nhánh thì: Kéo khối Nói [c].
-
Ở nhánh không thì: Kéo thêm một khối Nếu … thì … không thì khác lồng vào trong:
- Ở ô điều kiện: Lắp phép toán [a] = [c].
- Ở nhánh thì: Kéo khối Nói [b].
- Ở nhánh không thì: Kéo khối Nói [a].
Hướng dẫn làm bằng Python:
Code tham khảo:
# Đọc 3 số từ 3 dòng
a = int(input())
b = int(input())
c = int(input())
# Sử dụng cấu trúc rẽ nhánh để so sánh
if a == b:
print(c)
elif a == c:
print(b)
else:
print(a)