Kiểm tra s có phải là chuỗi chỉ chứa chữ cái hay không.Chủ đề: Thuật toán nâng cao Mục tiêu: Dãy con liên tiếp, tối ưu tổng Đề bài:Nhập vào một dãy n số nguyên... Đầu ra:Thu nhập nhỏ nhấ
Trang 1Nhập vào một số nguyên dương n.a) (4.0 điểm - 80%) In ra tất cả các số chẵn
từ 1 đến n.b) (1.0 điểm - 20%) Đếm có bao nhiêu số chia hết cho 3 và 5 trong đoạn
Chủ đề: Kiểm tra số đặc biệt và tính toán cơ bản trên số nguyên
Mục tiêu: Hiểu bản chất số nguyên tố, chia hết, ước số…
Đề bài:
Nhập vào một số nguyên dương n.a) (2.4 điểm - 40%) Kiểm tra n có phải là
số nguyên tố hay không.b) (1.8 điểm - 30%) Tính tổng các chữ số của n.c) (1.8 điểm - 30%) Tìm tất cả các ước số của n và in ra số ước.
Trang 2Nhập vào số nguyên n và dãy n số nguyên.
a) (2.4 điểm - 40%) Sắp xếp dãy theo thứ tự tăng dần.
b) (1.8 điểm - 30%) Tìm và in ra các số chia hết cho 5 trong mảng.
c) (1.8 điểm - 30%) Viết chương trình kiểm tra xem chuỗi nhập vào có phải là chuỗi đối xứng không (Ví dụ: madam, abccba)
Chủ đề: Thuật toán, tổ hợp, nâng cao
Mục tiêu: Rèn kỹ năng tư duy giải thuật, xử lý dãy con, đoạn con.
Đề bài:
Trang 3Nhập vào một dãy n số nguyên.a) (1.8 điểm - 60%) Tìm độ dài dãy con tăng dài nhất liên tiếp trong mảng.b) (1.2 điểm - 40%) Tính tổng lớn nhất của đoạn con liên tiếp bất kỳ (tương tự bài toán Kadane).
Gợi ý:
Dãy con tăng liên tiếp: duyệt và so sánh a[i] < a[i+1]
Tổng đoạn con lớn nhất: dùng thuật toán Kadane (tăng dần dãy tổng và reset nếu âm)
VD:
Input: [1, 2, 2, 3, 4, 1, 2, 3, 0]
Output:
a) Dãy con tăng dài nhất: 3 (dãy: 1 2 3 hoặc 1 2 3)
b) Tổng đoạn con lớn nhất: 13 (dãy: 2 + 3 + 4 + 1 + 2 + 3)
Trang 4Bài giải Bài 1: Rẽ nhánh & vòng lặp
print("Có", count, "số chia hết cho cả 3 và 5")
Câu 2: Số nguyên tố, tổng chữ số, ước số
Trang 5print("Không phải số nguyên tố")
print("Có", dem, "ước")
Câu 3: Mảng & chuỗi
Trang 6print("Chuỗi", s, "không phải chuỗi đối xứng")
Câu 4: Dãy con tăng & Tổng đoạn con lớn nhất
print("Độ dài dãy con tăng dài nhất:", max_len)
# b) Tổng đoạn con liên tiếp lớn nhất (Kadane đơn giản) max_sum = a[0]
cur_sum = a[0]
for i in range(1, len(a)):
Trang 7if cur_sum + a[i] > a[i]:
cur_sum = cur_sum + a[i]
Trang 8LUYỆN ĐỀ 2
Câu 1 (5,0 điểm)
Chủ đề: Cấu trúc rẽ nhánh & vòng lặp
Mục tiêu: Biết cách dùng if, for, while để giải bài toán thực tế.
Đề bài:Nhập vào số nguyên dương n.
Chủ đề: Kiểm tra số đặc biệt và tính toán cơ bản
Mục tiêu: Hiểu bản chất số hoàn hảo, tích chữ số, bội số
Đề bài:Nhập vào số nguyên dương n.
a) (2.4 điểm - 40%) Kiểm tra n có phải là số hoàn hảo không.
Mục tiêu: Biết lọc, đếm, kiểm tra chuỗi
Đề bài:Nhập vào số nguyên n và dãy gồm n số nguyên.
a) (2.4 điểm - 40%) Tìm số lớn thứ hai trong mảng.
b) (1.8 điểm - 30%) Đếm và in ra các số lẻ trong mảng.
Trang 9c) (1.8 điểm - 30%) Nhập chuỗi s Kiểm tra s có phải là chuỗi chỉ chứa chữ cái hay không.
Chủ đề: Thuật toán nâng cao
Mục tiêu: Dãy con liên tiếp, tối ưu tổng
Đề bài:Nhập vào một dãy n số nguyên.
a) (1.8 điểm - 60%) Tìm đoạn con có tổng nhỏ nhất.
b) (1.2 điểm - 40%) Tìm độ dài dãy con giảm liên tiếp dài nhất trong mảng Input:
Dãy = [3, 2, -5, 4, -6, -1, 2, -3]
Output:
a) Tổng đoạn con nhỏ nhất là: -8 (dãy: -6, -1, 2, -3)
b) Độ dài dãy con giảm liên tiếp dài nhất là 2 (ví dụ: 3 → 2 hoặc 4 → -6)
Trang 10if i % 2 != 0: # Kiểm tra nếu i là số lẻ
print(i, end=' ') # In số lẻ ra màn hình, cách nhau bằng dấu cách Bài 1-b:
n = int(input()) # Nhập vào số nguyên dương n
# Khởi tạo biến đếm số chia hết cho 3
count = 0
# Duyệt từ 1 đến n để tìm các số chia hết cho 3
for i in range(1, n+1):
if i % 3 == 0: # Kiểm tra nếu i chia hết cho 3
count += 1 # Tăng biến đếm lên 1
# In ra kết quả
print(f"Có {count} số chia hết cho 3.")
Bài 2a:
n = int(input()) # Nhập vào số nguyên dương n
# Kiểm tra số nguyên tố
is_prime = n > 1 and all(n % i != 0 for i in range(2, int(n**0.5) + 1))
Trang 11n = int(input()) # Nhập vào số nguyên dương n
# Tìm các ước số của n, chỉ duyệt từ 1 đến căn bậc hai của n
uocs = set()
for i in range(1, int(n**0.5) + 1): # Duyệt từ 1 đến căn bậc hai của n
if n % i == 0:
uocs.add(i) # Thêm ước số i
uocs.add(n // i) # Thêm ước số n // i (đối số)
# In ra kết quả
print(f"Ước của {n} là:", *sorted(uocs))
print(f"Có {len(uocs)} ước")
Bài 3:
s = input() # Nhập vào chuỗi s
c = input() # Nhập vào ký tự c mà ta muốn đếm
# Đếm số lần xuất hiện của ký tự c trong chuỗi s
count = s.count(c)
# In ra kết quả
print(f"Số lần xuất hiện của ký tự '{c}' là: {count}")
Trang 12s = input() # Nhập vào chuỗi s
# Duyệt qua chuỗi s và in mỗi ký tự 2 lần liên tiếp for char in s:
print(char * 2, end='') # In mỗi ký tự 2 lần Bài 4:
n = int(input()) # Nhập vào số nguyên dương n
Trang 13LUYỆN ĐỀ 3 Bài 1: Tính tiền taxi
10 km đầu: 13.000 VNĐ/km
Từ km 11 đến 30: 11.000 VNĐ/km
Trên 30 km: 10.000 VNĐ/km
Giảm 10% tổng tiền nếu đi > 100km
Input: 35 Output: Tổng tiền taxi: 385000 VNĐ
Bài 2: Kiểm tra số chính phương & tính tổng ước
a) Nhập n, kiểm tra chính phương
b) Tính tổng các ước của n
Input: 36 Output: 36 là số chính phương Tổng ước: 91
Bài 3: Mảng 1 chiều - Sắp xếp, tìm, xóa
Trang 14LUYỆN ĐỀ 4 Bài 1: Tính tiền internet theo gói
Cơ bản 100.000 VNĐ/tháng được 30GB
Quá mỗi GB: 3.000 VNĐ
Input: 45 Output: Tiền internet cần trả: 145000 VNĐ
Bài 2: Tính BCNN của danh sách số
Trang 15Hỏi đi 12.5km thì hết bao nhiêu tiền?
b) Tiền điện được tính như sau:
- 0–50 kWh: 1,678đ/kWh
- 51–100 kWh: 1,734đ/kWh
- Trên 100 kWh: 2,014đ/kWh
Với 135 kWh, tính tiền điện phải trả.
c) Gói mạng Internet cố định là 220,000đ/tháng Nếu đóng 12 tháng trước sẽ được giảm 1 tháng.
Tính tổng tiền phải trả nếu đăng ký 2 năm.
Viết chương trình nhận vào một số nguyên dương N và thực hiện:
a) Kiểm tra N có phải số nguyên tố không.
b) Tính tổng các chữ số của N Kiểm tra N có phải số chính phương không c) Tìm tất cả ước số và kiểm tra Ước chung lớn nhất với 100 là bao nhiêu.
Trang 16a) Tìm học sinh có điểm cao nhất và thấp nhất.
b) Đếm xem có bao nhiêu học sinh đạt loại giỏi (>=8.0).
c) Xóa tất cả điểm dưới 5 và in ra danh sách sau khi xóa.
Cho một dãy số nguyên N phần tử
a) Tìm đoạn con liên tiếp có tổng lớn nhất (Kadane's algorithm).
b) Tìm dãy con tăng dài nhất.
c) Tìm đoạn con có tích lớn nhất (áp dụng khi có cả số âm).
Trang 17Dãy con tăng dài nhất: 3 (ví dụ: [3,5,6]) Tích lớn nhất: 720 (đoạn: [5,6,-2,4])
"""
Trang 18# LUYỆN ĐỀ 5 - ĐỀ LUYỆN HỌC SINH GIỎI LỚP 9
# BÀI 1: TÍNH CHI PHÍ MUA HÀNG VÀ GIẢM GIÁ
Nhập vào số nguyên dương N Thực hiện các yêu cầu:
a) Kiểm tra xem N có chia hết cho 3, 5 và 9 không.
b) Đếm số lượng ước của N và cho biết tổng các ước đó.
c) Kiểm tra xem N có phải là số bậc thang hay không (các chữ số tăng dần hoặc giảm dần).
Trang 19Nhập vào danh sách tên học sinh trong lớp Ví dụ: ["An", "Bao", "Minh",
"Nam", "Linh", "Nhi"]
a) Đếm xem có bao nhiêu tên bắt đầu bằng chữ 'N'.
b) Sắp xếp danh sách tên theo thứ tự bảng chữ cái.
c) Thay thế tất cả các tên "Nam" thành "Nam Phong".
Output:
Tên bắt đầu bằng N: 2
Danh sách sau sắp xếp: ["An", "Bao", "Linh", "Minh", "Nam", "Nhi"]
Danh sách sau thay thế: ["An", "Bao", "Minh", "Nam Phong", "Linh", "Nhi"]
"""
# BÀI 4: DÃY CON - TOÁN DÃY SỐ TỔ HỢP
"""
Cho một dãy số nguyên Hãy thực hiện:
a) Tìm độ dài dãy con liên tiếp chia hết cho 3 dài nhất.
Trang 20LUYỆN ĐỀ 6 - ĐỀ LUYỆN HỌC SINH GIỎI LỚP 9
# BÀI 1: THỜI GIAN VÀ LỊCH BIỂU
sau đó cộng thêm 1 đơn vị (dịch mã đơn giản).
a) Nhập chuỗi ký tự thường, ví dụ: "abc"
b) Mã hóa theo quy tắc trên → "bcd"
c) Giải mã chuỗi vừa mã hóa để khôi phục chuỗi gốc.
Một lớp có 3 học sinh, mỗi bạn học 4 môn Hãy xử lý điểm theo ma trận sau:
a) Tính điểm trung bình từng học sinh.
Trang 21b) Tìm học sinh có điểm trung bình cao nhất.
c) Kiểm tra học sinh nào có tất cả các môn đều trên 5.
Hãy viết chương trình tính số bước ít nhất để đi từ vị trí (x1, y1) đến (x2, y2).
a) Tính số bước theo quy tắc: mỗi bước đi ngang/dọc 1 ô.
b) Tính tổng quãng đường nếu mỗi bước dài 1.5m.
Trang 22đề 8
BÀI 1: TÍNH TIỀN MUA HÀNG (Ứng dụng Toán thực tế)
Minh đi nhà sách mua đồ dùng học tập Hãy giúp Minh tính tổng chi phí.
🟨 BÀI 2: KIỂM TRA SỐ ĐẶC BIỆT
Viết chương trình nhập số nguyên dương N, và:
Kiểm tra N có chia hết cho 3 hoặc 5 không.
Kiểm tra N có phải là số đối xứng (palindrome).
🟨 BÀI 3: DANH SÁCH ĐIỂM SỐ
Nhập danh sách điểm (từ 0–10) của học sinh trong lớp.
BÀI 4: XỬ LÝ CHUỖI TÊN
Nhập vào danh sách tên học sinh.
Yêu cầu:
Trang 23Đếm số tên có độ dài lớn hơn 3 ký tự.
Tên dài nhất: "Minh"
Danh sách in hoa: ["AN", "LINH", "MINH", "BA
Trang 24ĐỀ 9
BÀI 1: CHUYẾN ĐI DÃ NGOẠI
Câu chuyện: Lớp 8A tổ chức chuyến đi chơi công viên, cần tính chi phí cho từng
bạn.
Yêu cầu:Viết chương trình nhận vào số học sinh, giá vé vào cổng, tiền thuê xe
theo đầu người và số tiền đóng góp quỹ lớp mỗi bạn.Tính tổng số tiền mà lớp phải chuẩn bị.
BÀI 2: KIỂM TRA SỐ – GIẢI MÃ MẬT MÃ
Yêu cầu:Cho một số nguyên dương N Thực hiện các bước sau
a) Kiểm tra N có phải là số thuận nghịch không (ví dụ 12321).
BÀI 3: CHUỖI - PHÂN TÍCH VÀ BIẾN ĐỔI
Yêu cầu:Nhập vào một chuỗi mô tả thời khóa biểu của học sinh, ví dụ "Toán, Văn,
Anh, Toán, Lý"
a) Đếm số môn học trùng nhau
b) In ra danh sách các môn không trùng (loại trùng lặp)
c) Sắp xếp danh sách theo thứ tự bảng chữ cái
Ví dụ: Input: "Toán, Văn, Anh, Toán, Lý"
Trang 25Số môn trùng nhau: 1
Danh sách không trùng: ['Toán', 'Văn', 'Anh', 'Lý']
Sau sắp xếp: ['Anh', 'Lý', 'Toán', 'Văn']
BÀI 4: THUẬT TOÁN - CHIA NHÓM HỌC SINH
Yêu cầu:Cho một danh sách chứa chiều cao (cm) của các bạn trong lớp.
a) Tính chiều cao trung bình
Đề bài:Cho hai số nguyên a và b Tính tổng tiền của một món hàng có giá a (đơn
vị: đồng) và số lượng b Sau đó tính giảm giá 15% nếu tổng tiền lớn hơn hoặc bằng
2 triệu đồng, in ra số tiền cần thanh toán.
Đầu vào:Hai số nguyên a, b (1 ≤ a, b ≤ 1000000).
Đầu ra:Số tiền cần phải trả, đã tính giảm giá (nếu có).
Đề bài:Nhập vào hai số nguyên dương a và b Tính số cặp số trong khoảng [a, b]
mà ước chung lớn nhất của chúng là 1.
Đầu vào:Hai số nguyên a, b (1 ≤ a ≤ b ≤ 1000).
Đầu ra:Số cặp số trong khoảng [a, b] mà có ước chung lớn nhất bằng 1.
def ucln(a, b):
if b == 0:
return a
Trang 26Đề bài:Nhập vào một danh sách các thu nhập của một nhóm người Tính thu nhập
nhỏ nhất, lớn nhất và số lượng thu nhập khác nhau trong danh sách.
Đầu vào:Số nguyên n (1 ≤ n ≤ 100), sau đó là một danh sách n các số nguyên Đầu ra:Thu nhập nhỏ nhất, thu nhập lớn nhất và số lượng thu nhập khác nhau
Bài 4: Dãy con liên tiếp
Đề bài:Cho một dãy số thực a có n phần tử Tìm dãy con liên tiếp có tổng lớn nhất
và tính tổng của dãy con đó.
Đầu vào:Hai số nguyên n, s (1 ≤ n ≤ 1000), sau đó là một danh sách n số thực Đầu ra:Tổng lớn nhất của dãy con liên tiếp.
Trang 27Bài 1: Tổng tiền mua hàng
Đề bài:Cho hai số nguyên a và b Tính tổng tiền của một món hàng có giá a (đơn
vị: đồng) và số lượng b Nếu tổng tiền lớn hơn hoặc bằng 500,000 đồng, áp dụng giảm giá 10% và in ra số tiền cần thanh toán.
Đầu vào:Hai số nguyên a, b (1 ≤ a, b ≤ 1000000).
Đầu ra:Số tiền cần phải trả sau khi áp dụng giảm giá (nếu có).
Đề bài:Nhập vào hai số nguyên dương a và b Tính số cặp số trong khoảng [a, b]
mà cả hai số đều là số nguyên tố.
Đầu vào:Hai số nguyên a, b (1 ≤ a ≤ b ≤ 1000).
Đầu ra:Số cặp số trong khoảng [a, b] mà cả hai số đều là số nguyên tố.
Bài 3: Tính thu nhập trung bình
Đề bài:Nhập vào danh sách thu nhập của n người trong một nhóm Tính thu nhập
trung bình của nhóm và in ra các thu nhập lớn hơn trung bình.
Đầu vào:Số nguyên n (1 ≤ n ≤ 100), sau đó là một danh sách n các số nguyên (thu
Trang 28avg = sum(a) / n
print(f"Thu nhập trung bình: {avg:.2f}")
print("Thu nhập lớn hơn trung bình:")
for x in a:
if x > avg:
print(x)
Bài 4: Dãy con liên tiếp có tổng lớn nhất
Đề bài:Cho một dãy số nguyên a có n phần tử Tìm dãy con liên tiếp có tổng lớn
current_sum = max(a[i], current_sum + a[i])
max_sum = max(max_sum, current_sum)
print(max_sum)
Bài 5: Đếm số lần xuất hiện của phần tử trong dãy
Đề bài:Nhập vào một dãy số nguyên, tính số lần xuất hiện của mỗi phần tử trong
dãy số và in ra phần tử và số lần xuất hiện của nó.
Đầu vào:Một số nguyên n (1 ≤ n ≤ 100), sau đó là một danh sách n các số nguyên Đầu ra:Mỗi phần tử và số lần xuất hiện của nó trong dãy.
for key, value in counts.items():
print(f"Phần tử {key} xuất hiện {value} lần")
Bài 6: Tìm số chia hết cho 3 và 5
Trang 29Đề bài:Cho một dãy số nguyên, tìm các số trong dãy chia hết cho cả 3 và 5 Đầu vào:Một số nguyên n (1 ≤ n ≤ 100), sau đó là một danh sách n các số nguyên Đầu ra:In ra các số chia hết cho cả 3 và 5 trong dãy số.
Bài 1: Tính tổng các số chia hết cho 2 hoặc 3 trong dãy
Đề bài:Cho một dãy số nguyên Hãy tính tổng các số chia hết cho 2 hoặc 3 trong
Bài 2: Số hoàn hảo
Đề bài:Một số nguyên dương n được gọi là số hoàn hảo nếu tổng các ước của nó
(không bao gồm chính nó) bằng chính nó Ví dụ: 6 là số hoàn hảo vì 1 + 2 + 3 = 6 Hãy kiểm tra xem số a có phải là số hoàn hảo hay không.
Đầu vào:Một số nguyên dương a (1 ≤ a ≤ 10000).
Đầu ra:In ra "YES" nếu số a là số hoàn hảo, ngược lại in ra "NO".
Trang 30Bài 3: Tính tổng dãy con liên tiếp có tổng nhỏ nhất
Đề bài:Cho một dãy số nguyên có n phần tử Hãy tìm tổng nhỏ nhất của một dãy
con liên tiếp trong dãy số đó.
Đầu vào:Một số nguyên n (1 ≤ n ≤ 1000) và một dãy số nguyên a có n phần tử Đầu ra:Tổng nhỏ nhất của một dãy con liên tiếp trong dãy.
current_sum = min(a[i], current_sum + a[i])
min_sum = min(min_sum, current_sum)
print(min_sum)
Bài 4: Đếm số nguyên tố trong dãy số
Đề bài:Cho một dãy số nguyên Hãy đếm số lượng số nguyên tố có trong dãy Đầu vào:Một số nguyên n (1 ≤ n ≤ 100), sau đó là một danh sách n các số nguyên Đầu ra:Số lượng số nguyên tố trong dãy số.
Trang 31Bài 5: Tìm số lớn nhất trong dãy con liên tiếp
Đề bài:Cho một dãy số nguyên a có n phần tử Hãy tìm số lớn nhất trong các dãy
con liên tiếp có tổng lớn nhất trong dãy số đó.
Đầu vào:Một số nguyên n (1 ≤ n ≤ 1000) và một dãy số nguyên a có n phần tử Đầu ra:Số lớn nhất trong dãy con liên tiếp có tổng lớn nhất.
Bài 6: Tìm số chia hết cho 7 trong dãy
Đề bài:Cho một dãy số nguyên Hãy tìm các số trong dãy chia hết cho 7 và in ra
print(*[i for i in range(1, n+1) if i % 2 == 0])
ds = [str(i) for i in range(1, n+1) if i % 3 == 0 and i % 5 == 0]
print(len(ds), *ds)
Trang 32print("CHAN" if n % 2 == 0 else "LE")
✅ Tối ưu: Dùng toán tử ba ngôi thay vì if - else
✅ Đáp ứng mọi test: Hoạt động đúng với mọi số nguyên
Trang 332 So sánh hai số
python
Sao chépChỉnh sửa
a, b = map(int, input().split())
print(">" if a > b else "<" if a < b else "=")
✅ Tối ưu: Gọn hơn bằng cách sử dụng toán tử ba ngôi lồng nhau
✅ Đáp ứng mọi test: Không bị lỗi khi nhập hai số bất kỳ
3 Kiểm tra năm nhuận
python
Sao chépChỉnh sửa
n = int(input())
print("YES" if (n % 4 == 0 and n % 100 != 0) or (n % 400 == 0) else "NO")
✅ Tối ưu: Viết điều kiện trong một dòng
✅ Đáp ứng mọi test: Hoạt động đúng với mọi giá trị n
✅ Tối ưu: Dùng công thức tổng cấp số cộng thay vì vòng lặp
✅ Đáp ứng mọi test: Không bị lỗi với số lớn
5 Đếm số chữ số của n
python
Sao chépChỉnh sửa
print(len(input().strip()))
✅ Tối ưu: Dùng len() để đếm số chữ số thay vì vòng lặp
✅ Đáp ứng mọi test: Đúng cho mọi số nguyên dương
✅ Bạn cần bài toán cụ thể nào không? ✅
4o
Bạn đã nói:
tôi muốn các dạng bài tập về sử dụng câu lệnh rẽ nhánh, tính toán đơn giản thực tế có ví dụ và chú thích, tối ưu pphu hợp với tất cả các test trên themis
Trang 34ChatGPT đã nói:
Dưới đây là một số bài tập sử dụng câu lệnh rẽ nhánh (if-else), kèm theo ví dụ, chú thích và cách viết tối ưu để phù hợp với Themis.
1 Kiểm tra số lớn nhất trong ba số
Đề bài: Nhập vào ba số nguyên a, b, c Xuất số lớn nhất
Giải pháp:
So sánh ba số bằng max(a, b, c) để tối ưu
Themis yêu cầu đầu vào hợp lệ nên ta chỉ cần đảm bảo nhập đúng định dạng.
Mã nguồn tối ưu:
✅ Tối ưu: Dùng max() thay vì if - else lồng nhau
✅ Phù hợp mọi test: Không lỗi với số âm, số lớn
2 Kiểm tra số có chia hết cho 3 và 5 không?
Đề bài: Nhập một số nguyên n Kiểm tra:
Nếu chia hết cho 3 và 5, in YES
Ngược lại, in NO
Giải pháp:
Kiểm tra n % 3 == 0 and n % 5 == 0
Mã nguồn tối ưu:
Trang 35Ví dụ:
Input Output
15 YES
10 NO
✅ Tối ưu: Dùng toán tử ba ngôi (if - else)
✅ Phù hợp mọi test: Không lỗi với số âm, số lớn
3 Kiểm tra số dương, âm hay 0
✅ Tối ưu: Sử dụng toán tử ba ngôi lồng
✅ Phù hợp mọi test: Đúng với mọi số nguyên
4 Tính tiền taxi dựa trên số km
Đề bài: Nhập số km x Tính tiền theo bảng sau:
Trang 36✅ Tối ưu: Không cần dùng if-else nhiều dòng.
✅ Phù hợp mọi test: Đúng với mọi x
5 Kiểm tra loại tam giác
Đề bài: Nhập ba cạnh tam giác a, b, c Kiểm tra loại:
Nếu không phải tam giác, in "INVALID"
Nếu tam giác đều, in "EQUILATERAL"
Nếu tam giác cân, in "ISOSCELES"
Nếu tam giác vuông, in "RIGHT"
Ngược lại, in "SCALENE" (thường)
Mã nguồn tối ưu:
Trang 37Input Output
7 2 2 INVALID
✅ Tối ưu: Sử dụng elif thay vì if lồng nhiều cấp
✅ Phù hợp mọi test: Kiểm tra đầy đủ tam giác
✅ Tối ưu: Sử dụng toán tử ba ngôi lồng
✅ Phù hợp mọi test: Không lỗi với số lẻ, số lớn
Tóm tắt cách tối ưu khi dùng if - else
✔ Dùng max() , min() , abs() nếu có thể thay thế if - else
✔ Dùng toán tử ba ngôi (a if condition else b ) để rút gọn.
✔ Viết gọn if - elif - else , tránh if lồng quá sâu.
✔ Kiểm tra đầy đủ đầu vào để tránh lỗi trên Themis
✅ Bạn cần thêm dạng bài nào không? ✅
4o
Trang 38Bạn đã nói:
các dạng bài tập sử dụng cấu trúc rẽ nhánh như có khuyến mại hoặc thuế như những bài toán về điện, nước, bán hàng, taxi
ChatGPT đã nói:
Dưới đây là các dạng bài tập sử dụng cấu trúc rẽ nhánh ( if - else ) áp dụng cho các bài toán thực
tế như khuyến mãi, thuế, tính tiền điện, tiền nước, tiền taxi, bán hàng, đảm bảo tối ưu và phù hợp với mọi test trên Themis.
✅ Tối ưu: Tính theo từng bậc, tránh lỗi sai
✅ Phù hợp mọi test: Đúng với mọi x
2 Tính tiền nước sinh hoạt
Đề bài: Nhập số m³ nước x, tính tiền theo bảng giá:
Trang 39print(10 * 5973 + (x - 10) * 7052)
else:
print(10 * 5973 + 10 * 7052 + (x - 20) * 8699)
✅ Tối ưu: Tính theo từng bậc giá
✅ Phù hợp mọi test: Xử lý đúng cho mọi x
print(10000 if x == 1 else x * 9000 if x <= 5 else x * 8000)
✅ Tối ưu: Sử dụng toán tử ba ngôi (if - else)
✅ Phù hợp mọi test: Xử lý đúng mọi trường hợp x
4 Tính thuế thu nhập cá nhân
Đề bài: Nhập mức thu nhập x (triệu VNĐ), tính thuế theo bảng:
≤ 5 triệu: Không tính thuế
✅ Tối ưu: Tránh lồng quá nhiều if
✅ Phù hợp mọi test: Không lỗi với số lớn
Trang 405 Tính tiền sau khuyến mãi
Đề bài: Nhập giá trị hóa đơn x, áp dụng khuyến mãi:
print(int(x * 0.9) if x >= 500000 else int(x * 0.95) if x >= 200000 else x)
✅ Tối ưu: Dùng toán tử ba ngôi để viết gọn
✅ Phù hợp mọi test: Xử lý đúng mọi giá trị x
6 Kiểm tra phí giao hàng
Đề bài: Nhập tổng giá trị đơn hàng x, tính phí vận chuyển:
print(0 if x >= 1000000 else 30000 if x >= 500000 else 50000)
✅ Tối ưu: Dùng toán tử ba ngôi để viết gọn
✅ Phù hợp mọi test: Đúng với mọi x
7 Tính tiền vé xem phim
Đề bài: Nhập độ tuổi age, tính giá vé:
Trẻ em (≤ 12 tuổi): 50.000 VNĐ
Người lớn (> 12 tuổi): 100.000 VNĐ
Người cao tuổi (≥ 60 tuổi): Giảm 30%
Mã nguồn tối ưu: