1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Đề thi chọn HSG môn tin năm 2019

10 81 4

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 75 KB
File đính kèm code_va_Test.rar (3 MB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đề thi, hướng dẫn làm các bài trong đề thi và bộ test dùng để chấm điểm. Chỉ cần tải về làm rồi dùng chương trình Themis để chấm bài. Nếu không làm được thì đọc hướng dẫn làm bài và đọc chương trình tôi đã viết. Cảm ơn

Trang 1

SỞ GIÁO DỤC VÀ ĐÀO TẠO

THANH HOÁ

ĐỀ DỰ BỊ

KỲ THI HỌC SINH GIỎI CẤP TỈNH

Năm học: 2018-2019

Môn thi: Tin học - Lớp 11 THPT

Thời gian: 180 phút (không kể thời gian giao đề)

Ngày thi: 21/03/2019

Đề này có 05 câu, gồm 02 trang.

Tổng quan bài thi:

Tên bài File chương trình File dữ liệu vào File kết quả

Dữ liệu vào là đúng đắn, không cần phải kiểm tra Trong các file dữ liệu vào/ra, nếu dữ liệu trên cùng một dòng thì được cách nhau bởi ít nhất 1 dấu cách Dấu (*) trong tên file chương trình biểu thị đuôi file tùy thuộc vào NNLT sử dụng ('pas' đối với NNLT PASCAL, ‘c’ đối với NNLT C, ).

Bài 1 (6 điểm): Số gần nguyên tố.

Số nguyên tố là số nguyên dương chỉ có 2 ước số phân biệt Bờm luôn thích những cái đặc biệt và mới lạ Anh đưa ra một định nghĩa mới “Số gần nguyên tố” – là số nguyên dương có đúng 3 ước số phân biệt.

Yêu cầu: Cho số nguyên dương N, hãy cho biết có bao nhiêu số “gần nguyên tố” nhỏ

hơn hoặc bằng N.

Dữ liệu vào: Đọc từ tệp BAI1.INP - số nguyên N (1≤ N ≤ 106).

Dữ liệu ra: Ghi ra tệp BAI1.OUT kết quả tìm được.

Ví dụ:

(Có 1 số “gần nguyên tố” nhỏ hơn hoặc bằng 6 là số 4)

Bài 2 (5 điểm): Bộ số thỏa mãn.

Cho số tự nhiên N Hãy cho biết có bao nhiêu bộ số tự nhiên x, y, z thỏa mãn: x+y+z=N và 0<x<y<z.

Dữ liệu vào: Đọc từ tệp BAI2.INP gồm một số N (5<N≤ 104).

Dữ liệu ra: Ghi ra tệp BAI2.OUT – số lượng các bộ số thỏa mãn.

Ví dụ:

Số báo danh

……….

Trang 2

(Có 2 bộ số thỏa mãn là 1+2+5 và 1+3+4)

Bài 3 (4 điểm): Tổng lớn nhất.

Cho dãy số nguyên A gồm N phần tử a1, a2, …., aN Dãy con ai, ai+1, …, aj (1≤i≤j≤N) là dãy được tạo từ các phần tử liên tiếp của A, bắt đầu từ phần tử thứ i và kết thúc ở phần tử thứ j.

Yêu cầu: Tìm dãy con của dãy A sao cho tổng các phẩn tử trong dãy con đó là lớn nhất.

Dữ liệu vào: Đọc từ tệp BAI3.INP gồm:

- Dòng đầu là N (1≤N≤106)

- Dòng tiếp theo là các số ai (-32000≤ ai ≤32000).

Dữ liệu ra: Ghi ra tệp BAI3.OUT tổng các phần tử trong dãy con tìm được.

Ví dụ:

7

2 -4 5 -1 4 6 -1

14

Bài 4 (3 điểm): Giải nén.

Xâu thuần nhất là xâu chỉ bao gồm các chữ cái tiếng Anh Một xâu thuần nhất S

có thể được viết thu gọn (để tiết kiệm bộ nhớ) bằng cách dùng tần số xuất hiện liên tiếp của nhóm đó.

Yêu cầu: Cho xâu thuần nhất dạng thu gọn, hãy chuyển thành xâu thuần nhất ban đầu

Dữ liệu vào: Đọc từ tệp BAI4.INP xâu ký tự S (chỉ gồm các chữ cái in hoa) dạng thu

gọn có độ dài không quá 103.

Dữ liệu ra: Ghi ra tệp BAI4.OUT xâu thuần nhất ban đầu.

Ví dụ:

XC((A2B)3C2)2Y XCAABAABAABCCAABAABAABCCY

Bài 5 (2 điểm): Số nhỏ nhất.

Cho số nguyên dương N

Yêu cầu: Xác định số nguyên dương nhỏ nhất có đúng N ước số.

Dữ liệu vào: Đọc từ tệp BAI5.INP - số nguyên dương N (1≤ N≤ 103)

Dữ liệu ra: Ghi ra tệp BAI5.OUT kết quả tìm được (kết quả đảm bảo không quá

2

Trang 3

Ví dụ:

Hết

-Giám thị coi thi không giải thích gì thêm.

Trang 4

const fi='BAI1.INP';

fo='BAI1.OUT';

var f:text;

N,d,i:longint;

{==========================}

function NTO(n:longint):boolean;

var i:longint;

begin

if n<2 then

exit(false);

for i:=2 to trunc(sqrt(n)) do

if n mod i=0 then

exit(false);

exit(true);

end;

{=========================}

BEGIN

assign(f,fi);

reset(f);

readln(f,n);

d:=0;

for i:=2 to n do

if sqrt(i)=trunc(sqrt(i)) then

if NTO(trunc(sqrt(i))) then

inc(d);

assign(f,fo);

rewrite(f);

write(f,d);

close(f);

END

4

Trang 5

const fi='BAI2.INP';

fo='BAI2.OUT';

var f:text;

n,x,y,z:longint;

d:int64;

begin

assign(f,fi);

reset(f);

read(f,n);

close(f);

d:=0;

for x:=1 to n div 3 do

for y:=x+1 to (n-x) div 2 do

begin

z:=n-x-y;

if z>y then

inc(d);

end;

assign(f,fo);

rewrite(f);

write(f,d);

close(f);

end

Trang 6

const fi='BAI3.INP';

fo='BAI3.OUT';

var f:text;

a:array[1 1000000] of longint;

n,i,j:longint;

max,s:int64;

begin

assign(f,fi);

reset(f);

readln(f,n);

for i:=1 to n do

read(f,a[i]);

close(f);

max:=-33000000000;

s:=0;

for i:=1 to n do

begin

if s<=0 then

s:=a[i]

else

s:=s+a[i];

if s>max then

max:=s;

end;

assign(f,fo);

rewrite(f);

write(f,max);

close(f);

end

6

Trang 7

const fi='BAI4.INP';

fo='BAI4.OUT';

var f:text;

so,s,a,b:ansistring;

i,j,k,n,mn,dn:longint;

begin

assign(f,fi);

reset(f);

readln(f,s);

close(f);

a:='';

i:=1;

while i<=length(s) do

if (s[i]>='A') and (s[i]<='Z') then

begin

a:=a+s[i];

inc(i);

end

else

if (s[i]>='0') and (s[i]<='9') then

begin

j:=i+1;

while (j<=length(s)) and (s[j]>='0') and (s[j]<='9') do

inc(j);

so:=copy(s,i,j-i);

val(so,n);

delete(s,i,j-i);

for k:=1 to n-1 do

a:=a+s[i-1];

end

else

begin

mn:=1;

dn:=0;

j:=i+1;

while mn>dn do

begin

if s[j]='(' then

mn:=mn+1;

if s[j]=')' then

dn:=dn+1;

j:=j+1;

Trang 8

j:=j-1;

b:=copy(s,i+1,j-i-1);

k:=j+1;

while (k<=length(s)) and (s[k]>='0') and (s[k]<='9') do

inc(k);

so:=copy(s,j+1,k-j-1);

val(so,n);

delete(s,i,k-i);

for k:=1 to n do

insert(b,s,i);

end;

assign(f,fo);

rewrite(f);

write(f,a);

close(f);

end

8

Trang 9

const fi='BAI5.INP';

fo='BAI5.OUT';

var f:text;

b,a:array[1 100] of longint;

n,na,nb,i:longint;

m:qword;

{=================================}

function NTO(n:longint):boolean;

var k,maxk:longint;

begin

if n<2 then

exit(false);

maxk:=trunc(sqrt(n));

k:=2;

while k<=maxk do

if n mod k=0 then

exit(false)

else

inc(k);

exit(true);

end;

{================================}

function LT(a,b:longint):qword;

begin

if b=0 then

LT:=1

else

LT:=LT(a,b-1)*a;

end;

{=================================}

begin

assign(f,fi);

reset(f);

readln(f,n);

close(f);

i:=2;

na:=0;

while na<100 do

begin

if NTO(i) then

begin

inc(na);

Trang 10

end;

inc(i);

end;

nb:=0;

i:=2;

while n>1 do

if n mod i=0 then

begin

inc(nb);

b[nb]:=i;

n:=n div i;

i:=2;

end

else

inc(i);

m:=1;

for i:=nb downto 1 do

m:=m*LT(a[nb-i+1],b[i]-1);

assign(f,fo);

rewrite(f);

write(f,m);

close(f);

end

10

Ngày đăng: 02/11/2020, 09:59

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w