Thẻ: Đề thi HSG Tin 9 CẤP TỈNH

74 Đề thi học sinh giỏi Tin học THCS cấp Tỉnh Có ĐÁP ÁN 2026-2027

Tổng Hợp 74 Đề Thi Học Sinh Giỏi Tin Học THCS Cấp Tỉnh Có Đáp Án (Năm Học 2026-2027)

Kỳ thi chọn học sinh giỏi Tin học cấp THCS (đặc biệt là lớp 9) luôn là một thử thách lớn đòi hỏi sự chuẩn bị kỹ lưỡng về tư duy thuật toán và kỹ năng lập trình. Để đồng hành cùng các thầy cô giáo và các em học sinh, Vi Tính Tấn Dân xin chia sẻ bộ tài liệu “74 Đề thi học sinh giỏi Tin học THCS cấp tỉnh có đáp án” được cập nhật mới nhất cho năm học 2026-2027.

Đây là nguồn tài liệu quý giá giúp các em làm quen với cấu trúc đề thi, rèn luyện kỹ năng giải thuật trên các ngôn ngữ phổ biến như C++, Python và Pascal.

Các đề ôn thi để chuẩn bị thi Cấp Xã thì các em vào đường dẫn phía dưới để tham khảo giúp thầy nhé!

    1. Giải đề 1 và đáp án thi Học sinh giỏi tin học Python C++ THCS có tài liệu ôn thi
    2. Giải đề 2 và đáp án thi Học sinh giỏi tin học Python C++ THCS có tài liệu ôn thi
    3. Giải đề 3 thi học sinh giỏi tin học lập trình Python có đáp án
    4. Giải đề 4 ôn thi học sinh giỏi Tin Học THCS lập trình Python có đáp án
    5. Giải đề 5 và đáp án thi HSG Tin Python có số Pell.
    6. Giải đề 6 và đáp án bồi dưỡng học sinh giỏi tin 10 có số Armstrong
    7. Giải đề 7 và đáp án  thi học sinh giỏi tin học 10 Python có số Collatz
    8. Giải đề 8 trong 20 đề Bồi dưỡng học sinh giỏi Tin học lớp 9 có số Kaprekar.
    9. Giải đề 9 thi HSG Tin học lớp 8 lập trình Python có số Happy
    10. Giải đề 10 thi tin học trẻ THPT có bài  In các xâu con trong xâu s.
    11. Đề thi hsg tin 11 python có đáp án hay nhất 2024
    12. 12 đề và đáp án thi HSG tin Python có sắp xếp
    13. Đề 13 thi học sinh giỏi Tin học THCS có đáp án hay nhất năm 2024.
    14. 14 đề bồi dưỡng học sinh giỏi tin học lớp 7, 8, 9 THCS mới nhất !
    15. 15 Đề thi học sinh giỏi Tin học lớp 9 cấp huyện hay nhất 2024 – 2025
    16. 16 Đề bài tập Python có lời giải PDF thi HSG cấp huyện mới nhất
    17. 17 đề thi tin học trẻ có Đáp Án python THCS cấp huyện PDF
    18. 18 Đề thi học sinh giỏi Tin học THCS có đáp ÁN dễ học nhất năm 2025
    19. 19 thi HSG Tin 9 C ++ hoặc Python có đáp án
    20. 100 đề và đáp án thi HSG tin Python cấp huyện 2025

1. Tại sao bạn nên tải bộ 74 đề thi HSG Tin học này?

Khác với các tài liệu trôi nổi trên mạng, bộ sưu tập 74 đề thi này được Vi Tính Tấn Dân tổng hợp và chọn lọc kỹ càng từ các kỳ thi chính thức của nhiều tỉnh thành trên cả nước trong những năm gần đây.

  • Số lượng lớn: Với 74 đề thi, học sinh có thể thoả sức luyện tập từ cơ bản đến nâng cao.

  • Có đáp án chi tiết: Tất cả các đề đều đi kèm Test case (Input/Output) chuẩn và Code mẫu (Solution) giúp học sinh dễ dàng đối chiếu kết quả.

  • Cập nhật xu hướng mới: Đề thi bám sát cấu trúc ra đề của Bộ GD&ĐT và các Sở GD&ĐT trong giai đoạn 2025-2027, tập trung mạnh vào tư duy thuật toán thay vì chỉ cú pháp ngôn ngữ.

2. Cấu trúc đề thi học sinh giỏi Tin học THCS năm 2026-2027 có gì mới?

Theo xu hướng chuyển đổi số và đổi mới giáo dục, đề thi HSG Tin học cấp tỉnh hiện nay thường có cấu trúc như sau:

  • Thời gian làm bài: 150 phút.

  • Hình thức: Thi lập trình trên máy tính (chấm tự động bằng các phần mềm như Themis, CMS…).

  • Ngôn ngữ lập trình: Cho phép sử dụng C++ (phổ biến nhất), Python (xu hướng mới) và Free Pascal.

Các dạng bài tập thường gặp:

  1. Bài toán số học: Tìm số nguyên tố, ước số, số hoàn hảo, xử lý số lớn…

  2. Xử lý mảng và chuỗi: Sắp xếp, tìm kiếm, thao tác trên xâu ký tự.

  3. Thuật toán & Quy hoạch động: Các bài toán tối ưu, bài toán cái túi, dãy con tăng dài nhất…

  4. Hình học & Tổ hợp: Tính diện tích, đếm số phương án…

3. Review nội dung bộ đề thi

Dưới đây là tóm tắt nội dung của một số đề thi tiêu biểu có trong bộ tài liệu này:

Đề số 01: Đề thi HSG Tin học Tỉnh Tiền Giang (Năm 2021- 2022)

  • Bài 1 (4 điểm): Tìm số nguyên tố đầy đủ?

  • Bài 2 (4 điểm): Tìm Mật Mã (Mảng 1 chiều + Thuật toán đếm)?

  • Bài 3 (4 điểm): Bài toán Ma Trận?

  • Bài 4 (4 điểm): Về hình học Tính Tam Giác?

  • Bài 5 (4 điểm): Tính Lãi Kép Ngân Hàng?

(Tất cả đều có code giải tham khảo bằng C++ và Python)

4. Hướng dẫn ôn thi hiệu quả với bộ tài liệu này

Để đạt kết quả cao nhất trong kỳ thi cấp tỉnh, các em học sinh nên tuân thủ lộ trình sau:

  1. Giai đoạn 1: Tải bộ đề về và phân loại theo độ khó.

  2. Giai đoạn 2: Tự bấm giờ làm bài giống như thi thật (không xem đáp án trước).

  3. Giai đoạn 3: So sánh kết quả với bộ Test case.

  4. Giai đoạn 4: Tham khảo Code mẫu để học hỏi cách viết code tối ưu, ngắn gọn và “sạch” hơn.

5. Tải xuống 74 Đề thi học sinh giỏi Tin học THCS cấp tỉnh (Full Code)

Các thầy cô và các em học sinh có thể tải trọn bộ tài liệu tại liên kết bên dưới. File nén bao gồm: File đề bài (PDF/Word), Bộ Test (Input/Output), và Code giải (CPP/PY/PAS).

Tải đề Thi Đề thi HSG Tin học THCS Python Cấp Tỉnh file PDF:

Tải bằng google driver


Lời kết

Hy vọng bộ tài liệu 74 đề thi học sinh giỏi Tin học THCS cấp tỉnh có đáp án 2026-2027 này sẽ là hành trang vững chắc giúp các em học sinh tự tin bước vào phòng thi và gặt hái giải cao.

Đừng quên ghé thăm Vi Tính Tấn Dân thường xuyên để cập nhật thêm nhiều tài liệu công nghệ, thủ thuật máy tính và đề thi mới nhất nhé!

Đáp Án Bài 1: Số Nguyên Tố Đầy Đủ

import sys
import math

# MỞ FILE VÀO / RA (đúng chuẩn thi)
sys.stdin = open("FULLPRIM.INP", "r")
sys.stdout = open("FULLPRIM.OUT", "w")


# Hàm kiểm tra số nguyên tố
def la_so_nguyen_to(so):
    if so < 2:
        return False
    if so == 2:
        return True
    if so % 2 == 0:
        return False

    can_bac_hai = int(math.sqrt(so))
    for uoc in range(3, can_bac_hai + 1, 2):
        if so % uoc == 0:
            return False
    return True


# ===== CHƯƠNG TRÌNH CHÍNH =====

# Nhập số lượng phần tử
so_luong = int(input())

# Nhập dãy số
day_so = list(map(int, input().split()))

ket_qua = []

# Duyệt từng số trong dãy
for so in day_so:
    if la_so_nguyen_to(so):
        so_dao = int(str(so)[::-1])
        if la_so_nguyen_to(so_dao):
            ket_qua.append(str(so))

# Xuất kết quả
if len(ket_qua) == 0:
    print(0)
else:
    print(" ".join(ket_qua))

🧠 Giải thích ngắn gọn cách làm

  1. Viết hàm la_so_nguyen_to() để kiểm tra số nguyên tố

  2. Với mỗi số trong dãy:

    • Kiểm tra số đó có nguyên tố không

    • Đảo ngược số

    • Kiểm tra số đảo có nguyên tố không

  3. Nếu cả hai đều nguyên tố → là số nguyên tố đẩy đủ

  4. In ra danh sách kết quả, nếu không có in 0


⏱️ Độ phức tạp

  • Kiểm tra 1 số nguyên tố: O(√n)

  • Tổng:

O(N × √max)
  • Bộ nhớ: O(1)

 

Đáp Án Bài 2: Mật Mã:

 

 

# SECRCODE.py
import sys
sys.stdin = open("SECRCODE.INP", "r")
sys.stdout = open("SECRCODE.OUT", "w")

xau = sys.stdin.read().strip()

# Mảng đếm số lần xuất hiện của các chữ cái a -> z
dem = [0] * 26

# Đếm ký tự
for ky_tu in xau:
    vi_tri = ord(ky_tu) - ord('a')
    dem[vi_tri] += 1
# Tạo mã bản quyền
ket_qua = ""
for i in range(26):
    if dem[i] > 0:
        ket_qua += str(dem[i])
print(ket_qua)

🔹 Phân tích bài toán

  • Đề bài cho một xâu ký tự thường a–z

  • Cần:

    1. Đếm số lần xuất hiện của từng chữ cái

    2. Theo thứ tự alphabet a → z

    3. Nếu chữ cái xuất hiện (đếm > 0) thì ghi số lần xuất hiện vào mã

  • Các số được nối liền nhau, không có dấu cách


🔹 Ví dụ phân tích

Xâu:

bcddaagfxybbbccccdeeezyyzzz
Ký tựSố lần
a2
b4
c6
d3
e5
f1
x3
y3
z4

👉 Mã bản quyền: 246351334


🔹 Ý tưởng giải

  • Dùng mảng đếm 26 phần tử, mỗi phần tử tương ứng một chữ cái

  • Duyệt xâu:

    • Mỗi ký tự → tăng biến đếm tương ứng

  • Duyệt mảng từ a đến z:

    • Nếu số đếm > 0 → nối vào kết quả


🔹 Độ phức tạp

  • Thời gian: O(n) (n là độ dài xâu)

  • Bộ nhớ: O(1) (chỉ dùng mảng 26 phần tử)

 

Đáp án bài 3: Chọn Phần Thưởng

 

# BONUSSEL.py
import sys
import math

sys.stdin = open("BONUSSEL.INP", "r")
sys.stdout = open("BONUSSEL.OUT", "w")

m, n = map(int, sys.stdin.readline().split())

tong = 0

for _ in range(m):
    dong = list(map(int, sys.stdin.readline().split()))
    for gia_tri in dong:
        can = int(math.isqrt(gia_tri))
        if can * can == gia_tri:
            tong += gia_tri

print(tong)

🔹 Phân tích bài toán

  • Cho bảng số nguyên dương kích thước m × n

  • Yêu cầu:

    • Tìm tất cả các số chính phương

    • Tính tổng các số đó


🔹 Số chính phương là gì?

Một số x là số chính phương nếu:

x = k² (k là số tự nhiên)

👉 Cách kiểm tra nhanh:

k = int(sqrt(x))
nếu k * k == xx là số chính phương

🔹 Ý tưởng giải

  • Đọc m, n

  • Duyệt từng phần tử trong bảng

  • Với mỗi số:

    • Tính căn bậc hai nguyên

    • Nếu bình phương lại bằng chính nó → cộng vào tổng


🔹 Độ phức tạp

  • Thời gian: O(m × n)

  • Bộ nhớ: O(1)

✅ Ghi nhớ khi đi thi

✔ Dùng math.isqrt() chính xác – nhanh – an toàn
✔ Biến đặt rõ nghĩa
✔ Không in thừa dòng, thừa khoảng trắng

Đáp án bài 4: Tam Giác

# TRIANGLE.py
import sys
sys.stdin = open("TRIANGLE.INP", "r")
sys.stdout = open("TRIANGLE.OUT", "w")

def binh_phuong_khoang_cach(x1, y1, x2, y2):
    return (x2 - x1) ** 2 + (y2 - y1) ** 2

T = int(sys.stdin.readline())

for _ in range(T):
    xa, ya, xb, yb, xc, yc = map(float, sys.stdin.readline().split())

    # Kiểm tra 3 điểm có thẳng hàng không
    dien_tich = (xb - xa) * (yc - ya) - (xc - xa) * (yb - ya)
    if dien_tich == 0:
        print("NO")
        continue

    # Tính bình phương độ dài các cạnh
    AB2 = binh_phuong_khoang_cach(xa, ya, xb, yb)
    BC2 = binh_phuong_khoang_cach(xb, yb, xc, yc)
    CA2 = binh_phuong_khoang_cach(xc, yc, xa, ya)

    # Kiểm tra định lý Pitago
    if (abs(AB2 + BC2 - CA2) < 1e-9 or
        abs(AB2 + CA2 - BC2) < 1e-9 or
        abs(BC2 + CA2 - AB2) < 1e-9):
        print("YES")
    else:
        print("NO")

🔹 Phân tích đề bài

Cho T bộ dữ liệu, mỗi bộ gồm tọa độ 3 điểm A, B, C trong mặt phẳng OXY.

Yêu cầu:
👉 Kiểm tra 3 điểm có tạo thành TAM GIÁC VUÔNG hay không

In:

  • "YES" nếu là tam giác vuông

  • "NO" nếu không phải


🔹 Điều kiện toán học

1️⃣ Ba điểm tạo thành tam giác

Ba điểm không thẳng hàng
Diện tích tam giác ≠ 0

👉 Kiểm tra bằng tích có hướng:

(xB - xA)(yC - yA) - (xC - xA)(yB - yA) ≠ 0

2️⃣ Tam giác vuông (định lý Pitago)

  • Gọi:
  • AB², BC², CA² là bình phương độ dài các cạnh

  • Tam giác vuông nếu:
  • AB² + AC² = BC²
    hoặc
    AB² + BC² = AC²
    hoặc
    AC² + BC² = AB²
  • ⚠️ KHÔNG lấy căn để tránh sai số số thực (đề đã nhắc)

🔹 Công thức bình phương khoảng cách

Với A(x₁, y₁), B(x₂, y₂):

AB² = (x₂ - x₁)² + (y₂ - y₁)²

🔹 Ý tưởng giải

Với mỗi bộ test:

  1. Đọc tọa độ A, B, C

  2. Kiểm tra có tạo thành tam giác

  3. Tính AB², BC², CA²

  4. Kiểm tra định lý Pitago

  5. In kết quả


🔹 Độ phức tạp

  • Mỗi test: O(1)

  • Tổng: O(T)
    → Chạy rất nhanh

 

✅ Giải thích điểm quan trọng (rất hay bị sai)

  • ⚠️ KHÔNG dùng sqrt()
    ⚠️ So sánh số thực phải dùng sai số nhỏ (1e-9)
    ⚠️ Phải kiểm tra tạo thành tam giác trước

📌 Mẹo ăn điểm khi thi

  • ✔ Dùng bình phương độ dài
    ✔ So sánh bằng abs(a-b) < 1e-9
    ✔ In đúng "YES" / "NO" (IN HOA)

1. Bản chất của đoạn code

Đoạn code này dùng để kiểm tra xem một tam giác có phải là tam giác vuông hay không dựa trên Định lý Pitago đảo.

  • Định lý: Nếu tổng bình phương hai cạnh bằng bình phương cạnh còn lại ($a^2 + b^2 = c^2$) thì đó là tam giác vuông.

  • Vì chúng ta không biết cạnh nào là cạnh huyền, nên phải kiểm tra cả 3 trường hợp:

    1. AB^2 + BC^2 = CA^2 (Vuông tại B)

    2. AB^2 + CA^2 = BC^2 (Vuông tại A)

    3. BC^2 + CA^2 = AB^2 (Vuông tại C)


2. Tại sao phải dùng abs(...) < 1e-9 mà không dùng dấu ==?

Đây là kiến thức “sống còn” cho học sinh khi thi HSG Tin học.

  • Vấn đề sai số: Trong máy tính, các số thực (kiểu float) được lưu dưới dạng nhị phân nên thường xảy ra sai số nhỏ.

    • Ví dụ: Kết quả lẽ ra là 25.0 nhưng máy tính có thể lưu là 24.99999999999999.

    • Nếu ta dùng if AB2 + BC2 == CA2:, máy sẽ trả về False (Sai), dẫn đến mất điểm oan.

  • Giải pháp: Thay vì so sánh bằng nhau tuyệt đối, ta kiểm tra xem hiệu của hai vế có đủ nhỏ hay không.

    • abs(AB2 + BC2 - CA2) là trị tuyệt đối của hiệu hai vế.

    • 1e-9 (tức là 10^{-9} hay 0.000000001) được gọi là sai số cho phép (epsilon).

Kết luận: Nếu hiệu của hai vế nhỏ hơn 10^{-9}, ta coi như chúng bằng nhau.


3. Cách giải thích cho học sinh (Ngôn ngữ của Thầy Dân)

Thầy có thể dạy các em như thế này:

  1. Bước 1: Tính bình phương độ dài 3 cạnh (gọi là AB2, BC2, CA2).

  2. Bước 2: Áp dụng Pitago đảo. Nhưng nhớ là trong lập trình, “bằng nhau” với số thực rất mong manh.

  3. Bước 3: Sử dụng “khoảng cách an toàn”. Nếu hai vế chỉ lệch nhau một tí xíu không đáng kể (< 1e-9) thì máy tính chấp nhận đó là tam giác vuông.


4. Code viết lại cho chuyên nghiệp

Các em có thể đưa đoạn này vào chuyên đề Hình học:

# Giả sử đã tính xong bình phương các cạnh AB2, BC2, CA2
sai_so = 1e-9 # Epsilon

# Kiểm tra từng trường hợp vuông tại A, B, hoặc C
vuong_tai_B = abs(AB2 + BC2 - CA2) < sai_so
vuong_tai_A = abs(AB2 + CA2 - BC2) < sai_so
vuong_tai_C = abs(BC2 + CA2 - AB2) < sai_so

if vuong_tai_A or vuong_tai_B or vuong_tai_C:
    print("YES") # Là tam giác vuông
else:
    print("NO")

Đáp án bài 5: Lãi Kép Ngân Hàng:

# COMPINT.py
import sys
sys.stdin = open("COMPINT.INP", "r")
sys.stdout = open("COMPINT.OUT", "w")

T = int(sys.stdin.readline())

for _ in range(T):
    M, r, n = map(float, sys.stdin.readline().split())
    n = int(n)

    tong_tien = M

    # Tính lãi kép qua từng tháng
    for _ in range(n):
        tong_tien = tong_tien + tong_tien * r / 100

    # In kết quả với 1 chữ số thập phân
    print(f"{tong_tien:.1f}")

🔹 Phân tích đề bài

  • T khoản gửi tiết kiệm

  • Mỗi khoản gồm:

    • M: tiền vốn ban đầu

    • r: lãi suất % mỗi tháng

    • n: số tháng gửi

  • Hình thức: LÃI KÉP

    • Tiền lãi của tháng trước được cộng vào vốn để tính lãi cho tháng sau

👉 Yêu cầu:
Tính tổng số tiền nhận được sau n tháng, in ra 1 chữ số thập phân


🔹 Công thức lãi kép theo tháng

Sau mỗi tháng:

T = T + T * r / 100

Tương đương:

T = T * (1 + r/100)

Lặp lại n lần


🔹 Ví dụ phân tích (đề bài)

Gửi:

M = 1 000 000
r = 0.7 (%)
n = 3
  • Tháng 1:
    T1 = 1000000 * 1.007 = 1007000

  • Tháng 2:
    T2 = 1007000 * 1.007 = 1014049

  • Tháng 3:
    T3 = 1014049 * 1.007 = 1021147.3


🔹 Ý tưởng giải

  • Đọc số bộ test T

  • Với mỗi bộ:

    • Gán tong_tien = M

    • Lặp n tháng:

      • tong_tien *= (1 + r/100)

  • In kết quả định dạng 1 chữ số thập phân


🔹 Độ phức tạp

  • Mỗi test: O(n) (n ≤ 500)

  • Tổng: O(T × n) → chạy rất nhanh


⚠️ Lưu ý quan trọng khi thi

Dùng số thực (float)
Không làm tròn sớm
✔ Chỉ làm tròn khi in kết quả
✔ In đúng 1 chữ số thập phân

🧠 Vì sao KHÔNG dùng công thức mũ?

Có thể dùng:

T = M * (1 + r/100)^n

❌ Nhưng dễ sai số số thực
✅ Vòng lặp an toàn hơn – đúng tinh thần đề THCS


📌 Tóm tắt nhanh

Nội dungGhi nhớ
Loại lãiLãi kép
Công thứcNhân dồn từng tháng
Output1 chữ số thập phân
Sai lầm hay gặpLàm tròn sớm