Bộ 12 Đề thi Học sinh giỏi Tin học Lớp 11 (Có đáp án)

Bài 1. MEMORY (6 điểm)

Năm 2025, Trường THPT HV kỉ niệm 15 năm thành lập trường kết hợp tổ chức cắm trại vào dịp ngày thành lập Đoàn thanh niên 26 tháng 3. Đây là lễ hội vô cùng quan trọng và lớn đối với trường, nên đã có rất nhiều khách mời là lãnh đạo các ban ngành, giáo viên – nhân viên đã và đang làm việc tại trường, cựu học sinh và học sinh đang học. Để tăng thêm phần ấn tượng cũng như tỏ lòng cảm ơn đối với khách mời, nhà trường có tổ chức trao quà lưu niệm cho một số cá nhân, tập thể đã có đóng góp lớn cho quá trình phát triển của nhà trường. Danh sách là tên các cá nhân, tập thể được lưu trong chuỗi kí tự liên tiếp.

Số lượng phần quà sẽ thay đổi liên tục do số tiền tài trợ cho chương trình có sự thay đổi theo từng ngày. Để không bị động về kinh phí trao quà, nhà trường đã giao cho Ban chấp hành Đoàn trường lập danh sách số lượng lớn nhất các cá nhân, hoặc tập thể có thể được nhận quà trong đoạn danh sách liên tiếp lấy từ danh sách ban đầu nhà trường đưa ra. Số lượng các cá nhân, tập thể được nhận quà tương ứng là số lượng chuỗi khác rỗng khác nhau có thể có sau khi bỏ một đoạn ký tự ở đầu hoặc cuối chuỗi (có thể không bỏ đoạn ký tự nào).

Yêu cầu: Bạn hãy viết chương trình giúp Ban chấp hành Đoàn trường đưa ra số lượng các cá nhân, hoặc tập thể có thể được nhận quà từ đoạn danh sách lấy ra.

Dữ liệu: Vào từ file văn bản MEMORY.INP gồm:

- Dòng đầu tiên chứa 2 số nguyên M, T lần lượt là độ dài danh sách ban đầu (1 ≤ M ≤ 2 x 105) và số lượng đoạn danh sách con (1 ≤ T ≤ 2 x 105).

- Dòng tiếp theo chứa một chuỗi S có độ dài M bao gồm các chữ cái Latin thường thể hiện tên của các cá nhân hoặc tập thể.

- T dòng tiếp theo, dòng thứ i (1 ≤ i ≤ T) gồm 2 số nguyên li và ri thể hiện một danh sách con được trích từ danh sách ban đầu từ vị trí li đến vị trí ri (1 ≤li ≤ ri ≤ M).

Lưu ý: Các số trên cùng một hàng cách nhau bởi một dấu cách.

Kết quả: Ghi ra file văn bản MEMORY.OUT gồm T dòng, dòng thứ i là một số nguyên thể hiện số lượng các cá nhân, tập thể có thể được nhận quà tương ứng với truy vấn thứ i.

docx 73 trang tinhoc 19/07/2025 81
Bạn đang xem 30 trang mẫu của tài liệu "Bộ 12 Đề thi Học sinh giỏi Tin học Lớp 11 (Có đáp án)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

Tóm tắt nội dung tài liệu: Bộ 12 Đề thi Học sinh giỏi Tin học Lớp 11 (Có đáp án)

Bộ 12 Đề thi Học sinh giỏi Tin học Lớp 11 (Có đáp án)
 Bộ 12 Đề thi Học sinh giỏi Tin học Lớp 11 (Có đáp án) - DeThiTinHoc.net
 DeThiTinHoc.net Bộ 12 Đề thi Học sinh giỏi Tin học Lớp 11 (Có đáp án) - DeThiTinHoc.net
 ĐỀ SỐ 1
 SỞ GD&ĐT HÀ NỘI KỲ THI CHỌN HỌC SINH GIỎI CẤP TRƯỜNG
TRƯỜNG THPT PHÙNG KHẮC KHỐI 10, 11
 KHOAN - THẠCH THẤT ĐỀ THI MÔN: TIN HỌC - KHỐI 11
 Thời gian: 150 phút, không kể thời gian giao đề
 Tổng quan đề thi
 Bài Tên bài Tên file Tên file input Tên file output Điểm
 1 SỐ NGUYÊN TỐ SNT.* SNT.INP SNT.OUT 3
 2 ĐẾM TRONG XÂU XAU.* STRING.INP STRING.OUT 5
 3 CHƯƠNG TRÌNH CON CTC.* CTC.INP CTC.OUT 4
 4 DANH SÁCH LIST.* LIST.INP LIST.OUT 4
 5 FILE FILE.* FILE.INP FILE.OUT 2
 6 SẮP XẾP SORT.* SORT.INP SORT.OUT 2
Dấu * là PY hoặc CPP tùy theo ngôn ngữ lập trình là PYTHON hay C++
Bài 1. Số nguyên tố (3 điểm) 
Viết chương trình nhập n số nguyên và cho biết dãy số vừa nhập có bao nhiêu số nguyên tố
Ví dụ:
SNT.INP SNT.OUP
nhập số n:5 Có 2 số nguyên tố
nhập phần tử thứ 1:1 
nhập phần tử thứ 2:4 
nhập phần tử thứ 3:2 
nhập phần tử thứ 4:6 
nhập phần tử thứ 5:7
Bài 2. Đếm trong xâu (5 điểm) 
Hãy viết chương trình nhập vào 1 câu văn và một từ, thực hiện các công việc sau đây:
a. Đếm và đưa ra số kí tự là chữ số, chữ hoa, chữ thường
b. Tìm số lần xuất hiện của từ vừa nhập trong câu văn đã nhập ban đầu
Dữ liệu vào:
Một dòng chứa 1 xâu ký tự (câu văn gồm các kí tự số, chữ cái thường và hoa, giữa các từ có 
dấu cách)
Một dòng chứa 1 từ
Dữ liệu ra:
Cho biết số chữ số, số chữ thường và số chữ hoa
 DeThiTinHoc.net Bộ 12 Đề thi Học sinh giỏi Tin học Lớp 11 (Có đáp án) - DeThiTinHoc.net
Cho biết từ nhập sau xuất hiện mấy lần trong câu văn nhập ban đầu
Ví dụ:
 STRING.INP STRING.OUP
 Toi la hoc sinh nen toi phai đi hoc luc 7 gio Số chữ số: 1
 Số chữ thường: 32
 Số chữ hoa: 1
 Hãy nhập 1 từ: hoc
 Từ hoc xuất hiện 2 lần
Bài 3. Chương trình con (3 điểm)
Viết chương trình phân tích số nguyên n thành các thừa số nguyên tố trong Python.
Dữ liệu vào: Số nguyên N
Dữ liệu ra: N được phân tích thành các thừa số nguyên tố
Ví dụ:
 CTC.INP CTC.OUP
Nhập số nguyên dương n = 12 Kết quả: 12 = 2 x 2 x 3
Bài 4. Danh sách (4 điểm)
Viết chương trình nhập n số nguyên. Tính tổng bình phương các số âm trong dãy
Dữ liệu vào: N số nguyên
Dữ liệu ra: Tổng bình phương các số âm
Ví dụ:
 LIST.INP LIST.OUP
nhập số n:5 Tổng bình phương các số âm: 10
nhập phần tử thứ 1:2 
nhập phần tử thứ 2:-1 
nhập phần tử thứ 3:2 
nhập phần tử thứ 4:-3 
nhập phần tử thứ 5:4
Bài 5. File (2 điểm)
Nhập vào 1 xâu là tên của 1 tệp và kiểm tra xem tên tệp đó có phải là tên của tệp chương 
trình Python hay không ?
Dữ liệu vào:
Dòng 1: Tên một tệp có đầy đủ phần tên và phần mở rộng
Dữ liệu ra:
Dòng 1: “Tệp mã nguồn Python” hoặc “không phải tệp mã nguồn Python”
 DeThiTinHoc.net Bộ 12 Đề thi Học sinh giỏi Tin học Lớp 11 (Có đáp án) - DeThiTinHoc.net
Ví dụ:
 FILE.INP FILE.OUP
Baitap1.py Baitap1.py là tệp mã nguồn Python
Baitap1.cpp Baitap1.cpp không phải tệp mã nguồn Python
Bài 6. Sắp xếp (2 điểm)
Viết chương trình nhập vào dãy A gồm n phần tử và in ra dãy số theo thứ tự giảm dần.
Dữ liệu vào:
Số nguyên dương n n số nguyên
Dữ liệu ra:
Dãy A được sắp xếp là dãy số theo thứ tự giảm dần
Ví dụ:
 SORT.INP SORT.OUP
nhập số n:5 9 6 4 3 1
nhập phần tử thứ 1:3 
nhập phần tử thứ 2:1 
nhập phần tử thứ 3:6 
nhập phần tử thứ 4:4 
nhập phần tử thứ 5:9
 ----------HẾT----------
 DeThiTinHoc.net Bộ 12 Đề thi Học sinh giỏi Tin học Lớp 11 (Có đáp án) - DeThiTinHoc.net
 ĐÁP ÁN
 Câu 1: Số nguyên tố (3 điểm)
 Tên tệp chương trình: SNT.*
 def is_prime(num):
 """Kiểm tra xem số num có phải là số nguyên tố không""" 
 if num <= 1: 
 return False
 for i in range(2, int(num**0.5) + 1):
 if num % i == 0:
 return False
 return True
 def main():
 # Đọc dữ liệu từ tệp SNT.INP
 with open(' SNT.INP ', 'r') as file:
 # Dòng đầu tiên là số lượng phần tử n
 n = int(file.readline().strip())
 # Dòng thứ hai là dãy số nguyên
 numbers = list(map(int, file.readline().strip().split()))
 # Đếm số lượng số nguyên tố trong dãy
 prime_count = sum(1 for num in numbers if is_prime(num))
 # Ghi kết quả vào tệp SNT.OUT
 with open(' SNT.OUT ', 'w') as file:
 file.write(f'Dãy số đã nhập có {prime_count} số nguyên tố.\n")
 # In kết quả ra màn hình print(f'Dãy số đã nhập có {prime_count} số nguyên tố.")
 if _name__== "__main _
 main()
Câu 2: Đếm trong xâu (4 điểm)
Tên tệp chương trình: XÂU.*
def main():
 # Đọc câu văn và từ cần tìm từ tệp STRING.INP
 with open(' STRING.INP ', 'r') as file:
 # Dòng đầu tiên là câu văn
 sentence = file.readline().strip()
 # Dòng thứ hai là từ cần tìm word_to_find = file.readline().strip()
 # a. Đếm và đưa ra số kí tự là chữ số, chữ hoa, chữ thường digits = sum(1 for char in 
 sentence if char.isdigit()) # Đếm chữ số uppercase = sum(1 for char in sentence if 
 char.isupper()) # Đếm chữ hoa lowercase = sum(1 for char in sentence if char.islower()) # 
 DeThiTinHoc.net Bộ 12 Đề thi Học sinh giỏi Tin học Lớp 11 (Có đáp án) - DeThiTinHoc.net
 Đếm chữ thường
 # b. Tìm số lần xuất hiện của từ trong câu
 word_count = sentence.lower().split().count(word_to_find.lower()) # Đếm từ xuất hiện, 
không phân biệt hoa thường
 # In kết quả
 print(f"Số chữ số trong câu văn: {digits}")
 print(f"Số chữ hoa trong câu văn: {uppercase}")
 print(f"Số chữ thường trong câu văn: {lowercase}")
 print(f"Số lần xuất hiện của từ '{word_to_find}' trong câu văn: {word_count}")
 # Ghi kết quả vào tệp STRING.OUT
 with open(' STRING.OUT ', 'w') as file: 
 file.write(f"Số chữ số trong câu văn: {digits}\n") 
 file.write(f"Số chữ hoa trong câu văn: {uppercase}\n") 
 file.write(f"Số chữ thường trong câu văn: {lowercase}\n") 
 file.write(f"Số lần xuất hiện của từ '{word_to_find}' trong câu văn:
{word_count}\n")
if__name _== "__main _": 
 main()
Câu 3: Chương trình con 
Tên tệp chương trình: CHUONG TRINH CON.* def prime_factors(n):
 factors = []
 # Kiểm tra số 2
 while n % 2 == 0:
 factors.append(2)
 n //= 2
 # Kiểm tra các số lẻ từ 3 trở đi
 i = 3
 while i * i <= n:
 while n % i == 0:
 factors.append(i)
 n //= i
 i += 2
 # Nếu n > 2 và còn lại là số nguyên tố
 if n > 2:
 factors.append(n)
 return factors
def main():
 DeThiTinHoc.net Bộ 12 Đề thi Học sinh giỏi Tin học Lớp 11 (Có đáp án) - DeThiTinHoc.net
 # Đọc số nguyên từ tệp CTC.INP
 with open(' CTC.INP 'r') as file:
 n = int(file.readline().strip())
 # Phân tích n thành các thừa số nguyên tố
 factors = prime_factors(n)
 # Ghi kết quả vào tệp CTC.OUT
 with open(' CTC.OUT 'w') as file: 
 file.write("Các thừa số nguyên tố của " + str(n) + " là: " + ' 'join(map(str, factors)) + '\n')
 # In kết quả ra màn hình
 print(f"Các thừa số nguyên tố của {n} là: {' 'join(map(str, factors))}")
if __name__== " __main__": 
 main()
Câu 4: Danh sách (4 điểm)
Tên tệp chương trình: LIST.* def main():
 # Đọc tên tệp từ tệp LIST.INP
 with open(' LIST.INP 'r') as file:
 filename = file.readline().strip() # Đọc dòng đầu tiên và loại bỏ khoảng trắng thừa
 # Kiểm tra xem tên tệp có phải là tệp Python không if filename.endswith(".py"):
 result = f"Tên tệp {filename} là tệp chương trình Python."
 else:
 result = f"Tên tệp {filename} không phải là tệp chương trình Python."
 # Ghi kết quả vào tệp LIST.OUT
 with open(' LIST.OUT', 'w') as file:
 file.write(result + '\n')
 # In kết quả ra màn hình
 print(result)
if__name _== "__main _
 main()
Câu 5: File (2 điểm)
Tên tệp chương trình: FILE.*
def main():
 # Đọc tên tệp từ tệp FILE.INP
 with open(' FILE.INP 'r') as file:
 filename = file.readline().strip() # Đọc dòng đầu tiên và loại bỏ khoảng trắng thừa
 # Kiểm tra xem tên tệp có phải là tệp Python không
 if filename.endswith(".py"):
 result = f"Tên tệp {filename} là tệp chương trình Python."
 DeThiTinHoc.net Bộ 12 Đề thi Học sinh giỏi Tin học Lớp 11 (Có đáp án) - DeThiTinHoc.net
 else:
 result = f"Tên tệp {filename} không phải là tệp chương trình Python."
 # Ghi kết quả vào tệp FILE.OUT
 with open(' FILE.OUT 'w') as file:
 file.write(result + '\n')
 # In kết quả ra màn hình
 print(result)
if__name _== "__main _":
 main()
Câu 6: Sắp xếp (2 điểm)
Tên tệp chương trình: SORT.*
def main():
 # Đọc dữ liệu từ tệp
 with open('SORT.INP', 'r') as file:
 # Đọc số lượng phần tử n
 n = int(file.readline().strip())
 # Đọc dãy số
 A = list(map(int, file.readline().strip().split()))
 # Sắp xếp dãy A theo thứ tự giảm dần 
 A.sort(reverse=True)
 # Ghi kết quả vào tệp SORT.OUT
 with open(' SORT.OUT 'w') as file:
 # Ghi dãy số sau khi sắp xếp
 file.write(' '.join(map(str, A)) + '\n')
if__name _== "__main _":
 main()
 DeThiTinHoc.net Bộ 12 Đề thi Học sinh giỏi Tin học Lớp 11 (Có đáp án) - DeThiTinHoc.net
 ĐỀ SỐ 2
 SỞ GD&ĐT HÀ NỘI ĐỀ THI HỌC SINH GIỎI CẤP TRƯỜNG
TRƯỜNG THPT PHAN HUY CHÚ Môn: Tin học – Khối 11
 – QUỐC OAI Thời gian: 120 phút (không kể thời gian giao đề)
 ĐỀ THI CHÍNH THỨC
Họ tên: . SBD: . Lớp: 
Câu 1 (4 điểm). Đong gạo: Tý được mẹ giao nhiệm vụ là đong gạo để mang lên nhà trọ. Tý 
được mẹ đưa cho 2 loại túi để đựng gạo đó là loại 5kg và 3kg. Tý sẽ phải đong đủ số gạo mẹ 
cho vào 2 loại túi trên. Hãy giúp Tý đong với số lượng túi ít nhất có thể, nếu không thể đong 
dược, in ra -1
 VD1 VD2
 Dữ liệu nhập vào Kết quả Dữ liệu nhập vào Kết quả
 18 4 4 -1
Câu 2 (4 điểm) Trâu và Cỏ: Có x con trâu và y bó cỏ. Trong đó có 03 loại trâu:
Trâu đứng 1 con ăn 5 bó cỏ
Trâu nằm: 1 con ăn 3 bó cỏ
Trâu già: 3 con ăn 1 bó cỏ
Hỏi có mấy con trâu đứng, mấy con trâu nằm và mấy con trâu già. Biết x con trâu này ăn vừa 
đúng hết y bó cỏ.
 Dữ liệu nhập vào Kết quả
1 4
100 100 0 25 75
 4 18 78
 8 11 81
 12 4 84
Câu 3 (4 điểm): Kí tự duy nhất đầu tiên
Một xâu kí tự S gom dãy chữ cái tiếng Anh in thường, hãy tìm vị trí đầu tiên của kí tự xuất 
hiện l lần duy nhất trong xâu S. Các kí tự trong xâu được đánh thứ tự 1, 2, 3, ... nếu không có 
kí tự não như vậy thi in ra số -1.
 Dữ liệu nhập vào Kết quả
4 1
abcdbc 6
abcdefabcde -1
 DeThiTinHoc.net Bộ 12 Đề thi Học sinh giỏi Tin học Lớp 11 (Có đáp án) - DeThiTinHoc.net
ababab 1
a
Câu 4 (4 điểm) 
Số nguyên tố: Nhập vào tử bàn phím số nguyên dương M (2<= M<= 64000)
Viết chương trình tính tổng của số nguyên tố lớn nhất không vượt quá M và số nguyên tố 
nhỏ nhất còn lớn hơn M.
 Dữ liệu nhập vào Kết quả
10 18
 Giải thích:
 Số nguyên tố lớn nhất không vượt quá 10 là 7
 Số nguyên tố nhỏ nhất còn lớn hơn 10 là 11
 7 + 11 = 18
Câu 5 (4 điểm) Chơi game
Phong và Hải đang chơi trò chơi có n cấp độ. Tất nhiên ai cũng muốn vượt qua n cấp độ của 
trò chơi. Nhung Phong có thể vượt qua cấp p độ của trò chơi, Hải vượt qua cấp q của trò 
chơi. Em biết các chỉ số cấp độ trò chơi mà Phong và Hải có thể vượt qua, liệu khi Phong và 
Hải hợp tác cùng chơi thì họ có vượt qua toàn bộ các cấp độ của trò chơi hay không?
 Dữ liệu nhập vào Kết quả
4 YES
3123
224
4 NO
3123
223
 ------------HẾT------------
 DeThiTinHoc.net

File đính kèm:

  • docxbo_12_de_thi_hoc_sinh_gioi_tin_hoc_lop_11_co_dap_an.docx
  • rarFile Chương trình Đề 3.rar