Đề 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();