Đề thi chọn HSG môn Tin học huyện Đạ Tẻh năm 2020 kèm lời giải

1. ĐỀ THI
| PHÒNG GIÁO DỤC VÀ ĐÀO TẠO HUYỆN ĐẠ TẺH ĐỀ CHÍNH THỨC (Đề thi có 02 trang) | KỲ THI CHỌN HỌC SINH GIỎI CẤP HUYỆN MÔN TIN HỌC LỚP 9 NĂM HỌC 2020 – 2021 Thời gian làm bài: 150 phút Ngày thi: / /2020 |
Cấu trúc đề thi:
| Câu | Tên bài | Tên file bài làm | Tên file INPUT | Tên file OUTPUT |
| 1 | Ước chung lớn nhất | UCLN.* | UCLN.INP | UCLN.OUT |
| 2 | Điếm các số nguyên tố | NGUYENTO.* | NGUYENTO.INP | NGUYENTO.OUT |
| 3 | Dãy theo quy luật | DAYXN.* | DAYXN.INP | DAYXN.OUT |
Lưu ý: Dấu * được thay thế bởi pas, cpp hoặc py của ngôn ngữ lập trình được sử dụng tương ứng là Pascal, C++ hoặc Python
Câu 1: (6 điểm) Ước chung lớn nhất
Cho hai số tự nhiên N, M (1 < N, M < 109). Viết chương trình tìm ước chung lớn nhất của hai số N và M?
Dữ liệu vào từ file: UCLN.INP
– Dòng đầu tiên ghi hai số N và M cách nhau một khoảng trắng.
Kết quả ra file: UCLN.OUT
– Dòng đầu tiên ghi ước chung lớn nhất tìm được.
Ví dụ:
| UCLN.INP | UCLN.OUT |
| 2 4 | 2 |
| 11 17 | 1 |
Câu 2: (7 điểm) Điế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 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 | 3 |
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.
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); …; Xn = f(Xn+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 |
———— Hết ———–
| Họ tên thí sinh: ………………………………………….. | Số báo danh: ………………… |
| Giám thị 1: ……………………………………………… Giám thị 2: ……………………………………………… | Ký tên: ……………………… Ký tên: ……………………… |
2. HƯỚNG DẪN GIẢI
Câu 1: Ước chung lớn nhất
def UCLN(a,b):
while a != b:
if a > b: a = a - b
else: b = b - a
return a
f_in = open("UCLN.INP","r"); f_out = open("UCLN.OUT","w");
line = f_in.readline()
a_line = line.split()
f_out.write(str(UCLN(int(a_line[0]),int(a_line[1]))))
f_in.close(); f_out.close();Câu 2: Đếm các số nguyên tố
def is_prime(n):
if n < 2: return False
else:
m = math.sqrt(n); i = 2;
while (n%i != 0) and (i<m): i = i + 1
if i>m: return True
else: return False
import math
f_in = open("NGUYENTO.INP","r"); f_out = open("NGUYENTO.OUT","w");
n = int(f_in.readline())
line = f_in.readline(); text_a_line = line.split();
dem = 0
for i in range(0,n):
if is_prime(int(text_a_line[i])) == True: dem = dem + 1
f_out.write(str(dem))
f_in.close(); f_out.close();Câu 3: Dãy theo quy luật
def f(x):
st = str(x); s = 0;
for i in range(0,len(st)): s = s + int(st[i])**2
return s
f_in = open("DAYXN.INP","r"); f_out = open("DAYXN.OUT","w");
line = f_in.readline(); text_a_line = line.split();
x, n = int(text_a_line[0]), int(text_a_line[1])
f_out.write(str(x))
for i in range(0,n-1):
f_out.write(" " + str(f(x)))
x = f(x)
f_in.close(); f_out.close();