Hướng dẫn de thi hsg tin python - đề thi hsg tin trăn

Thông tin tài liệu

Ngày đăng: 15/03/2022, 10:22

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 ĐỀ 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: S=1+ 1 + + + 22 32 n2 * Dữ liệu vào từ file: TONG.INP - Dòng ghi số tự nhiên n * Kết file: TONG.OUT - Dòng ghi số thực tổng S, làm tròn đến hai chữ số thập phân Ví dụ: TONG.INP TONG.OUT 1,361 1,424 Phân tích: Kết file OUT dùng dấu phẩy (,) để ngăn cách phần nguyên phần thập phân làm tròn chữ số thập phân Đây xem “bẩy” kĩ đọc phân tích đề (cịn gọi “bẩy” cá tính thí sinh) Code tham khảo: #Đọc liệu vào từ file INP fi = open('tong.inp') n = int(fi.read()) fi.close() #Thuật toán tong = 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 môn tin THCS – Giải đề thi ngôn ngữ python for i in range(1,n+1): tong = tong + 1/(i**2) #Xử lý dấu thập phân 10 tong = str(round(tong,3)) #làm tròn chữ số thập phân 11 tong=tong.replace('.',',',1) #thay dấu chấm dấu phẩy , 12 #Ghi vào file OUT 13 fo = open('tong.out','w') 14 fo.write(tong) 15 fo.close() ☼Tìm hiểu: replace(); round(); str() Câu 2: Tìm số tự mãn dãy Qui ước: Số tự mãn bậc số tổng lập phương chữ số Ví dụ: Số 153 số tự mãn 153 = 13 + 53 + 33 Cho dãy gồm N phần tử số nguyên dương A1, A2, , An; (0

- Xem thêm -

Xem thêm: CHUYEN DE GIAI DE THI HSG TIN THCS VOI PYTHON,

Bạn đang xem 20 trang mẫu của tài liệu "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 ngôn ngữ lập trình Python 3.x - Nguyễn Tấn Phong", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên20 trang mẫu của tài liệu "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 ngôn ngữ lập trình Python 3.x - Nguyễn Tấn Phong", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

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; (0 b: a = a - b 
 else: b = b - a 
 return a 
#ghi file OUT 
fo = open('UCLN.OUT','w') 
print(ucln(m,n),file=fo) 
fo.close() 
9 
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 
Câu 2: (7 điểm) Đếm các số nguyên tố 
 Cho dãy số nguyên gồm N phần tử Ai (0 < N < 103, 0 < Ai < 106). Viết chương 
trình đếm xem trong dãy số đã cho có bao nhiêu phần tử là số nguyên tố? 
 Dữ liệu vào từ file: NGUYENTO.INP 
 - Dòng đầu tiên ghi hai số N 
- Dòng thứ hai ghi N số nguyên, các số cách nhau một khoảng trắng. 
Kết quả ra file: NGUYENTO.OUT 
 - Dòng đầu tiên ghi kết quả đếm được. 
 Ví dụ: 
NGUYENTO.INP NGUYENTO.OUT 
2 
2 4 
1 
5 
7 13 27 13 29 
4 
Phân tích: 
Code tham khảo: 
Cách 1: Dùng thuật toán tìm kiếm trên dãy số 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
# Ham kiem tra so nguyen to 
def ktnt(a): 
 if(a<2): return False 
 for i in range(2,a//2+1): 
 if a%i==0: return False 
 return True 
#đọc file INP 
fi = open('NGUYENTO.INP') 
n = int(fi.readline()) 
dayso = list(map(int,fi.readline().split())) 
fi.close() 
#Thuật toán tìm kiếm 
10 
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 
13 
14 
15 
16 
17 
18 
19 
dem=0 
for i in dayso: 
 if ktnt(i): dem += 1 
#ghi file out 
fo = open('NGUYENTO.OUT','w') 
fo.write(str(dem)) 
fo.close() 
☼Tìm hiểu: Với cách viết câu lệnh dòng 14, 15 thì n được cho không dùng đến. 
Cách 2: Dùng List Comprehension 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
# Ham kiem tra so nguyen to trong python 
def ktnt(a): 
 if(a<2): return False 
 for i in range(2,a//2+1): 
 if a%i==0: return False 
 return True 
#đọc file INP 
fi = open('NGUYENTO.INP') 
n = int(fi.readline()) 
dayso = list(map(int,fi.readline().split())) 
fi.close() 
# thuật toán 
b = [x for x in dayso if ktnt(x)] 
#ghi file out 
fo = open('NGUYENTO.OUT','w') 
fo.write(str(len(b))) 
fo.close() 
☼Tìm hiểu: hàm len() 
Câu 3: (7 điểm) Dãy theo quy luật 
Quy ước: Ứng với mỗi số tự nhiên x (0 < x < 106), ta có số tự nhiên f(x) bằng 
tổng bình phương các chữ số của x. 
11 
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 
Chẳng hạn: x = 12 thì f(x) = 12 + 22 = 5. 
Từ x ta xây dựng dãy Xn theo quy ước như sau: 
 X1 = x ; X2 = f(X1) ; X3 = f(X2) ; ; Xi = f(Xi - 1) (với 1 <= i <= n < 102) 
Viết chương trình in ra dãy (Xn)? 
Dữ liệu vào từ file: DAYXN.INP 
- Dòng đầu tiên ghi số tự nhiên x và n, cách nhau một khoảng trắng. 
Kết quả ra file: DAYXN. OUT 
- Dòng đầu tiên ghi n phần tử đầu tiên của dãy, các số cách nhau một khoảng 
trắng. 
Ví dụ: 
DAYXN.INP DAYXN. OUT 
12 4 12 5 25 29 
Phân tích: 
Code tham khảo: 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
#Hàm tính tổng bình phương các chữ số 
def f(x): 
 return sum([int(i)**2 for i in str(x)]) 
#Đọc file INP 
fi=open('DAYXN.INP') 
x,n=map(int,fi.readline().split()) 
fi.close() 
#Thuật toán_Ghi file OUT 
fo=open('DAYXN.OUT','w') 
for i in range(n): 
 fo.write(str(x)+' ') 
 x=f(x) 
fo.close() 
☼Tìm hiểu: 
12 
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 
3. ĐỀ THI HSG HUYỆN ĐẠ HOAI – NĂM HỌC 2020 – 2021 
Câu 1: (5 điểm) Tính tổng 
 Viết chương trình tính và xuất ra màn hình tổng sau: 
1 1 1 1
S= + + ...+
1.3 2.4 3.5 .( 2)a a
+
+
 Với a là số nguyên dương nhập từ bàn phím. Kết quả làm tròn 1 chữ số thập 
phân. 
 Ví dụ: 
Dữ liệu vào (a) Kết quả 
1 0.3 
2 0.5 
Phân tích: Bài này đề yêu cầu nhập/xuất chuẩn, không yêu cầu dữ liệu vào ra từ 
file. 
Code tham khảo: 
1 
2 
3 
4 
a = int(input('- Nhập a = ')) 
s = 0 
for i in range(1,a+1): s += 1/(i*(i+2)) 
print('%.1f'%s) 
☼Tìm hiểu: - Định dạng số thập phân trong python theo chuẩn '%.1f'% 
- Khi a là số lớn (từ 7 chữ số trở lên) thì thời gian chạy của vòng lặp (for, while) là 
rất lâu, đây được xem là một bài tập có “bẫy” về thời gian chạy và kiến thức toán 
học. 
Kiến thức số học: Các tổng mà mỗi số hạng có tử số nhỏ hơn mẫu số (hay số hạng 
của tổng nhỏ hơn 1) thì tổng đó sẽ hội tụ về gần một giá trị cố định nào đó. Trong 
câu trên, với a>=10 thì S làm tròn 1 chữ số thập phân sẽ luôn bằng 0.7; Do vậy, để 
tránh “bẩy” thời gian chạy với số lớn ta sửa lại đoạn code như sau: 
1 
2 
3 
a = int(input('- Nhập a = ')) 
if a>=10: s = 0.7 
else: 
13 
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 
4 
5 
 for i in range(1,a+1): s += 1/(i*(i+2)) 
print('%.1f'%s) 
Câu 2: (5 điểm) Tổng chẵn 
 Cho một dãy số nguyên có n số (0s: s=2*a[i]-3*a[j]+5*a[z] 
#Ghi file OUT 
fo=open('BOBASO.OUT','w') 
fo.write(str(s)) 
fo.close() 
☼ Tìm hiểu: 
5. ĐỀ THI HSG HUYỆN BẢO LÂM – NĂM HỌC 2020 – 2021 
Câu 1: (6 điểm) Diện tích tam giác vuông 
 Cho ba số tự nhiên a, b, c (0 < a, b, c < 106). Hãy viết chương tính diện tích 
tam giác nếu ba số đã cho là số đo ba cạnh của một tam giác vuông. 
 Dữ liệu vào từ file: TAMGIAC.INP 
 - Dòng đầu tiên ghi ba số tự nhiên a, b và c, các số cách nhau khoảng trắng. 
 Kết quả ra file: TAMGIAC.OUT 
 - Dòng đầu tiên ghi diện tích tính được (làm tròn một chữ số thập phân), nếu 
nếu ba số đã cho không phải là ba cạnh của tam giác vuông thì ghi số -1. 
 Ví dụ: 
TAMGIAC.INP TAMGIAC.OUT 
3 4 5 6.0 
3 4 9 -1 
Phân tích: 
Code tham khảo: 
1 
2 
#Đọc dữ liệu từ file INP 
fi = open('TAMGIAC.INP') 
26 
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 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
a,b,c = map(int,fi.readline().split()) 
fi.close() 
#Thuật toán 
s = -1 
if a*a == b*b + c*c: s = round(0.5*b*c,1) 
elif b*b == a*a + c*c: s = round(0.5*a*c,1) 
elif c*c == b*b + a*a: s= round(0.5*a*b,1) 
#Ghi file OUT 
fo = open('TAMGIAC.OUT','w') 
fo.write(str(s)) 
fo.close() 
Cải tiến code trên bằng cách sử dụng mảng một chiều như sau: 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
#Đọc dữ liệu từ file INP 
fi = open('TAMGIAC.INP') 
a = list(map(int,fi.readline().split())) 
fi.close() 
#Thuật toán 
a.sort() 
s = -1 
if a[2]**2 == a[0]**2 + a[1]**2: s = round(0.5*a[0]*a[1],1) 
#Ghi file OUT 
fo = open('TAMGIAC.OUT','w') 
fo.write(str(s)) 
fo.close() 
☼ Tìm hiểu: 
Câu 2: (7 điểm) Tính số ngày 
Với lịch dương thì các tháng có 31 ngày là: 1, 3, 5, 7, 8, 10, 12 và các tháng 
có 30 ngày là: 4, 6, 9, 11. Riêng tháng 2 có thể có 28 hoặc 29 ngày tùy theo năm. Từ 
năm 2012 đến năm 2099, các năm chia hết cho 4 đều là năm nhuận và tháng 2 của 
năm nhuận có thêm ngày thứ 29. 
27 
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 
Cho hai bộ ba số {d1, m1, y1} và {d2, m2, y2}, mỗi bộ ba số là lần lượt là 
ngày, tháng, năm (2012 <= y1, y2 <=2099). Hãy viết chương trình tính số ngày trong 
khoảng thời gian được cho. 
 Dữ liệu vào từ file: SONGAY.INP 
 - Hai dòng đầu, mỗi dòng ghi lần lượt ba số là ngày, tháng và năm, các số 
cách nhau khoảng trắng. 
 Kết quả ra file: SONGAY.OUT 
 - Dòng đầu tiên ghi số ngày tính được. 
 Ví dụ: 
SONGAY.INP SONGAY.OUT 
25 1 2012 
26 3 2012 
61 
20 1 2018 
20 11 2020 
1035 
Phân tích: 
Code tham khảo: 
Cách 1: Dựa theo cách tính toán số học (phép đếm) 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
#Đọc dữ liệu vào từ file INP 
fi = open('SONGAY.INP') 
d1,m1,y1 = map(int,fi.readline().split()) 
d2,m2,y2 = map(int,fi.readline().split()) 
fi.close() 
#Thuật toán 
a=[0,31,28,31,30,31,30,31,31,30,31,30,31] 
songay=0 
if y1==y2: 
 if y1%4==0: a[2] = 29 
 a[m1] = a[m1] - d1 
 a[m2] = d2 
28 
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 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
 if m2==m1: songay = d2 - d1 
 else: songay = sum(a[m1:m2+1]) 
elif y1