Đề 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âuTên bàiTên file bài làmTên file INPUTTên file OUTPUT
1Ước chung lớn nhấtUCLN.*UCLN.INPUCLN.OUT
2Điếm các số nguyên tốNGUYENTO.*NGUYENTO.INPNGUYENTO.OUT
3Dãy theo quy luậtDAYXN.*DAYXN.INPDAYXN.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.INPUCLN.OUT
2 42
11 171

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.INPNGUYENTO.OUT
2 2 41
5 7 13 27 -13 293

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.INPDAYXN.OUT
12 412 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();

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *