Nội dung text CHUYEN DE GIAI DE THI HOC SINH GIOI TIN THCS BANG PYTHON.pdf
Tác giả: NGƯT Nguyễn Tấn Phong – Trường THCS Đồng Nai, Cát Tiên, Lâm Đồng TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI TIN HỌC BẬC THCS CHUYÊN ĐỀ GIẢI ĐỀ THI HỌC SINH GIỎI BẰNG NNLT PYTHON 3.x Tác giả: NGƯT Nguyễn Tấn Phong Đơn vị: Trường THCS Đồng Nai, huyện Cát Tiên, tỉnh Lâm Đồng 1. ĐỀ THI HSG HUYỆN CÁT TIÊN – NĂM HỌC 2020 – 2021 Câu 1: Tính tổng Viết chương trình tính tổng: 2 2 2 1 1 1 S=1+ + +...+ 2 3 n * Dữ liệu vào từ file: TONG.INP - Dòng đầu tiên ghi số tự nhiên n. * Kết quả ra file: TONG.OUT - Dòng đầu tiên ghi số thực là tổng S, làm tròn đến hai chữ số thập phân. Ví dụ: TONG.INP TONG.OUT 3 1,361 4 1,424 Phân tích: Kết quả file OUT dùng dấu phẩy (,) để ngăn cách phần nguyên và phần thập phân và làm tròn 3 chữ số thập phân. Đây được xem là một “bẩy” kĩ năng đọc và phân tích đề bài (còn gọi là “bẩy” cá tính thí sinh). Code tham khảo: 1 2 3 4 5 6 #Đọc dữ liệu vào từ file INP fi = open('tong.inp') n = int(fi.read()) fi.close() #Thuật toán tong = 0
2 Tài liệu bồi dưỡng học sinh giỏi môn tin THCS – Giải đề thi bằng ngôn ngữ python 7 8 9 10 11 12 13 14 15 for i in range(1,n+1): tong = tong + 1/(i**2) #Xử lý dấu thập phân tong = str(round(tong,3)) #làm tròn 3 chữ số thập phân tong=tong.replace('.',',',1) #thay dấu chấm . bởi dấu phẩy , #Ghi vào file OUT fo = open('tong.out','w') fo.write(tong) fo.close() ☼Tìm hiểu: .replace(); round(); str() Câu 2: Tìm số tự mãn trong dãy Qui ước: Số tự mãn bậc 3 là những số bằng tổng lập phương các chữ số của nó. Ví dụ: Số 153 là số tự mãn vì 153 = 13 + 53 + 33 . Cho dãy gồm N phần tử là số nguyên dương A1, A2, ... , An; (03 Tài liệu bồi dưỡng học sinh giỏi môn tin THCS – Giải đề thi bằng ngôn ngữ python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #Đọc dữ liệu vào từ file INP fi = open('SOTUMAN.INP') n = int(fi.readline()) a = fi.readline().split() for i in range(n): a[i] = int(a[i]) #chuyển mảng a về số nguyên fi.close() #Xây dựng hàm kiểm tra số tự mãn (True/False) def sotuman(m): tlp=0 for i in str(m): tlp = tlp + int(i)**3 if tlp==m: return True return False #Thuật toán xử lý b=[] for i in a: if sotuman(i): b.append(i) b.sort() #Sắp xếp mảng b tăng dần #Ghi kết quả vào file OUT fo = open('SOTUMAN.OUT','w') for i in b: fo.write(str(i)+' ') fo.close() Cách 2: Tối ưu cách 1 bằng kĩ thuật sử dụng List Comprehension 1 2 3 4 5 6 7 #đọc dữ liệu vào fi = open('SOTUMAN.INP') n = int(fi.readline()) a = list(map(int,fi.readline().split())) fi.close() #Thuật toán với List Comprehension b = []