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

Đề và đáp án thi HSG môn tin học tỉnh thanh hóa năm 2017 2018

10 3,4K 23
Tài liệu đã được kiểm tra trùng lặp

Đ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 317,14 KB
File đính kèm Bộ Test.rar (70 KB)

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

Nội dung

Đề thi chính thức môn Tin học Kỳ thi HSG tỉnh Thanh Hóa năm 2017 - 2018. Chương trình giải các bài trong đề viết bằng NNLT Pascal. Bộ Test chấm chi tiết được đính kèm, mọi người chỉ cần tải về và chấm bằng chương trình themis

Trang 1

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

THANH HOÁ

ĐỀ CHÍNH THỨC

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

Năm học: 2017-2018

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: 09/03/2018

Đề 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, 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 (5 điểm):Hệ đếm

Lần đầu tiên tiếp xúc với các vấn đề cơ sở Tin học, Mạnh ngỡ ngàng và thú vị khi được

làm quen với hệ đếm cơ số 2 (Hệ đếm nhị phân) Mạnh nghĩ ra một xâu kí tự chỉ bao gồm các

kí tự ‘0’ và ‘1’ biểu diễn một số tự nhiên N trong hệ đếm cơ số 2 và đố Hải tìm biểu diễn của

N trong hệ đếm cơ số 10 (Hệ đếm thập phân)

Ví dụ: Mạnh nghĩ ra xâu ‘00010101’ là biểu diễn của số tự nhiên 15 trong hệ đếm cơ số 2

Yêu cầu: Hãy giúp Hải chuyển xâu kí tự biểu diễn số tự nhiên N trong hệ đếm cơ số 2 thành

xâu biểu diễn N trong hệ đếm cơ số 10

Dữ liệu vào: Từ tệp văn bản BAI1.INP gồm một dòng duy nhất chứa xâu S có độ dài không

quá 32 ký tự

Dữ liệu ra: Ghi ra tệp văn bản BAI1.OUT xâu biểu diễn của N trong hệ đếm cơ số 10

Ví dụ:

10101110 174

Bài 2 (5 điểm): Tìm số nguyên tố

- Tìm tất cả các số P lớn hơn M và nhỏ hơn N thỏa mãn các điều kiện sau:

+ Là số nguyên tố

+ Tổng các chữ số của P phải chia hết cho k

Dữ liệu vào: Từ tệp văn bản BAI2.INP: Gồm 3 số M, N, k (1 ≤ M,N,k ≤ 106) (các số cách nhau ít nhất một dấu cách)

Dữ liệu ra: Ghi ra tệp văn bản BAI2.OUT gồm duy nhất 1 số là số lượng các số thỏa mãn yêu

cầu đầu bài

Ví dụ:

BAI2.INP BAI2.OUT BAI2.INP BAI2.OUT

Bài 3 (4 Điểm): Taxi

Trong dịp nghỉ hè các bạn học sinh lớp 12 dự định tổ chức dã ngoại đến biển Sầm Sơn và

sẽ đi bằng taxi Các bạn được chia thành n nhóm, nhóm thứ i gồm Si bạn (1 ≤ Si ≤ 4) và mỗi chiếc taxi chở tối đa 4 hành khách Vậy lớp 12 cần thuê ít nhất bao nhiêu chiếc taxi để chở các nhóm đi, với điều kiện là các bạn trong nhóm phải ngồi chung taxi (một taxi có thể chở một nhóm trở lên)

Dữ liệu vào: Từ tệp văn bản BAI3.INP gồm:

- Dòng đầu chứa số nguyên n (1 ≤ n ≤ 105) (số lượng các nhóm học sinh)

Số báo danh

………

Trang 2

- Dòng số 2 chứa dãy số nguyên S1, S2, , Sn (1 ≤ Si ≤ 4) Các số nguyên cách nhau bởi dấu cách với Si là số học sinh trong nhóm thứ i

Dữ liệu ra: Ghi ra tệp văn bản BAI3.OUT là 1 số nguyên duy nhất là số lượng tối thiểu xe taxi

cần thiết để chở tất cả học sinh đến nơi

Ví dụ:

5

1 2 4 3 3

4

Bài 4 (3 điểm): Hamming

Dãy số nguyên dương tăng dần, trong đó ước nguyên tố của mỗi số không quá 5 được gọi

là dãy Hamming

Như vậy, 10 = 2×5 sẽ là một số trong dãy Hamming, còn 26 = 2×13 không thuộc dãy Hamming

Phần đầu của dãy Hamming là 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15,

Yêu cầu: Cho số nguyên x (1 ≤ x ≤ 109) Hãy xác định số thứ tự của x trong dãy Hamming

Dữ liệu vào: Từ tệp văn bản BAI4.INP:

- Dòng đầu tiên chứa số nguyên t – số lượng tests (1 ≤ t ≤ 105),

- Các dòng tiếp theo mỗi dòng chứa một số nguyên x

Dữ liệu ra: Ghi ra tệp văn bản BAI4.OUT: kết quả mỗi test đưa ra trên một dòng dưới dạng số

nguyên hoặc thông báo (-1) nếu không tồn tại số đó trong dãy Hamming

Ví dụ:

11

1

2

6

7

8

9

10

11

12

13

14

2

6 -1

7

8

9 -1

10 -1 -1

Bài 5 (3 điểm): Số lớn nhất

Cho 2 số nguyên dương X=X1X2…Xn và Y= Y1Y2…Ym (M,N ≤ 200) Hãy tìm số Z=Z1Z2…Zk lớn nhất (Z nhận được từ X và Y bằng cách xoá đi một số chữ số)

Ví dụ: X= 12345 Y= 435012

Thì Z=45 (nhận được từ X bằng cách xoá đi X1,X2,X3; nhận được từ Y bằng cách xoá đi Y2 ,

Y4 , Y5 , Y6)

Dữ liệu vào: Từ tệp văn bản BAI5.INP gồm:

- Dòng thứ nhất là X

- Dòng thứ hai là Y

Dữ liệu ra: Ghi ra tệp văn bản BAI5.OUT 1 số Z là kết quả của bài toán

Ví dụ:

42572

39258

4351023

123

Trong đó: có 1/6 số test chỉ tồn tại số Z mà các chữ số của nó trong X và Y là liên tiếp nhau

- Hết -

Trang 3

CHƯƠNG TRÌNH

Bài 1 (5 điểm):Hệ đếm

const fi='BAI1.inp';

fo='BAI1.out';

var f:text;

s:string;

i:byte;

t:int64;

begin

assign(f,fi);

reset(f);

readln(f,s);

close(f);

assign(f,fo);

rewrite(f);

t:=0;

for i:=1 to length(s) do

if s[i]='1' then

t:=t*2+1

else

t:=t*2;

write(f,t);

close(f);

end

Các bộ test

Bài 2 (5 điểm): Tìm số nguyên tố

const fi='BAI2.inp';

fo='BAI2.out';

var f:text;

m,n,k,i,dem,t,s:longint;

function kt(i:longint):boolean;

var j:longint;

begin

if i<2 then exit(false)

else

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

if i mod j=0 then

exit(false);

exit(true);

end;

begin

assign(f,fi);

reset(f);

readln(f,m,n,k);

Trang 4

close(f);

assign(f,fo);

rewrite(f);

dem:=0;

for i:=m+1 to n-1 do

if kt(i) then

begin

t:=i;

s:=0;

while t>0 do

begin

s:=s+t mod 10;

t:=t div 10;

end;

if s mod k=0 then

inc(dem);

end;

write(f,dem);

close(f);

end

Bài 3 (4 Điểm): Taxi

const fi='BAI3.INP';

fo='BAI3.OUT';

var f:text;

d:array[1 4] of longint;

n,i,x,s:longint;

begin

assign(f,fi);

reset(f);

readln(f,n);

for i:=1 to n do

begin

read(f,x);

inc(d[x]);

end;

close(f);

s:=d[4];

if d[3]>d[1] then

d[1]:=0

else

d[1]:=d[1]-d[3];

s:=s+d[3];

s:=s+d[2] div 2;

if d[2] mod 2=0 then

d[2]:=0

else

d[2]:=1;

Trang 5

if d[2]=1 then

begin

s:=s+1;

if d[1]>2 then

d[1]:=d[1]-2

else

d[1]:=0;

end;

if d[1] mod 4=0 then

s:=s+d[1] div 4

else

s:=s+d[1] div 4 +1;

assign(f,fo);

rewrite(f);

write(f,s);

close(f);

end

01 6

02 60

4 1 4 1 2 4 3 3 2 4 3 2 2 1 4 4 3

2 3 3 4 4 2 4 2 3 1 3 1 1 4 2 4 1

4 3 2 1 3 1 2 3 1 2 2 3 1 3 3 4 2

1 3 4 1 1 1 2 2 2

37

03 100

4 4 3 3 3 3 2 1 2 2 3 4 3 2 3 2 2

4 4 3 2 1 3 2 4 2 4 1 1 3 1 4 1 4

2 1 2 1 1 2 3 4 1 2 1 2 1 3 3 2 4

4 4 1 1 3 1 1 3 3 4 4 4 2 3 3 4 3

3 3 4 2 3 2 4 1 3 4 1 1 2 4 4 2 2

1 3 4 1 3 3 4 3 4 4 1 3 2 1 2

66

04 300

4 1 4 3 2 3 4 1 2 4 2 3 2 4 3 3 3

2 3 1 3 1 3 4 4 3 3 4 3 1 3 1 3 1

1 3 4 2 3 1 3 2 4 3 4 4 3 4 1 1 4

2 1 3 1 2 1 3 2 2 2 3 3 4 4 2 1 1

4 2 3 4 2 1 3 4 2 3 1 1 4 3 3 4 2

4 2 3 1 4 4 3 3 2 4 2 4 2 2 1 2 3

4 2 4 4 3 4 4 1 4 3 4 3 2 1 2 2 3

4 2 1 4 1 1 2 4 2 4 4 1 1 1 1 3 4

4 1 3 2 1 3 4 4 3 4 1 4 1 1 3 2 1

4 3 1 2 4 2 3 4 1 1 1 4 3 4 3 3 4

3 1 3 4 3 4 4 1 2 1 4 1 3 2 3 1 3

2 3 2 4 4 1 1 3 3 1 4 4 2 3 1 4 2

4 2 2 3 1 4 1 1 2 3 1 3 3 1 2 3 1

4 4 4 3 2 1 3 4 4 4 2 2 4 3 3 3 2

3 2 1 2 3 2 1 1 1 4 1 4 1 4 3 4 2

2 2 2 2 4 4 4 2 3 3 4 2 2 1 1 1 3

1 1 1 2 2 3 1 2 1 1 1 2 1 2 4 1 4

2 2 4 1 1 1 1 2 1 1 2

188

05

06

07

08

Từ Test 05 đến Test 08 có dữ liệu lớn nên tôi xin đính kèm tài liệu này Các bạn có thể tải về tham khảo

Trang 6

Bài 4 (3 điểm): Hamming

const fi='BAI4.inp';

fo='BAI4.out';

ti=1000000000;

var f,ff:text;

m,n,i,d,j,k,max3:longint;

a:array[1 100000] of longint;

b:array[1 10000] of int64;

m2:array[0 30] of int64;

m3:array[0 19] of int64;

m5:array[0 13] of int64;

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

procedure QS(L,R:longint);

var i,j,g,tg:longint;

begin

i:=L;

j:=R;

g:=b[(i+j) div 2];

while i<=j do

begin

while b[i]<g do

inc(i);

while b[j]>g do

dec(j);

if i<=j then

begin

if i<j then

begin

tg:=b[i];

b[i]:=b[j];

b[j]:=tg;

end;

inc(i);

dec(j);

end;

end;

if i<R then QS(i,R);

if j>L then QS(L,j);

end;

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

begin

m2[0]:=1;

for i:=1 to 30 do

m2[i]:=m2[i-1]*2;

m3[0]:=1;

for i:=1 to 19 do

m3[i]:=m3[i-1]*3;

m5[0]:=1;

for i:=1 to 13 do

m5[i]:=m5[i-1]*5;

d:=0;

for i:=0 to 29 do

begin

m:=ti div m2[i];

max3:=0;

while m3[max3]<=m do

inc(max3);

for j:=0 to max3-1 do

begin

m:=ti div (m2[i]*m3[j]);

k:=0;

while m5[k]<=m do

begin

Trang 7

inc(d);

b[d]:=m2[i]*m3[j]*m5[k];

inc(k);

end;

end;

end;

QS(1,d);

assign(f,fi);

reset(f);

readln(f,n);

assign(ff,fo);

rewrite(ff);

k:=1;

for i:=1 to n do

begin

readln(f,m);

for j:=1 to d do

if b[j]=m then

break;

if b[j]=m then

writeln(ff,j)

else

writeln(ff,-1);

end;

close(f);

close(ff);

end

01 20

0

28

31

42

60

46

95

57

3

91

15

38

33

81

4

1

66

98

64

2

-1 -1 -1 -1

26 -1 -1 -1

3 -1

11 -1 -1

31

4

1 -1 -1

27

2

02 100

0

1

0

0

1

3

1

0

5

-1

1 -1 -1

1

3

1 -1

5

3

Trang 8

3

0

1

1

18

0

20

16

19

1

14

4

26

20

27

2

14

19

20

36

40

66

4

74

75

44

33

82

47

2

27

71

109

105

92

59

74

197

13

215

91

128

146

74

51

182

295

17

233

22

82

287

287

390

371

243

-1

1

1

13 -1

14

12 -1

1 -1

4 -1

14

17

2 -1 -1

14

20

21 -1

4 -1

29 -1 -1 -1 -1

2

17 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

38 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

50 -1

Trang 9

59

1

101

75

519

195

54

210

589

212

9

574

334

318

385

705

669

369

637

133

111

631

890

375

708

824

7

1172

1223

1121

864

463

518

1406

1171

1 -1

29 -1 -1

25 -1 -1 -1

8 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

59 -1 -1 -1 -1 -1 -1

82 -1 -1 -1 -1

03

04

05

06

Từ Test 03 đến Test 06 có dữ liệu lớn nên tôi xin đính kèm tài liệu này Các bạn có thể tải về tham khảo

Bài 5 (3 điểm): Số lớn nhất

const fi='Bai5.inp';

fo='Bai5.out';

var f:text;

X,Y:string;

n,m,i,j:longint;

C:array[0 200,0 200] of string;

begin

assign(f,fi);

reset(f);

readln(f,X);

readln(f,Y);

close(f);

n:=length(X);

Trang 10

m:=length(Y);

for i:=1 to n do

for j:=1 to m do

if X[i]=Y[j] then

begin

c[i,j]:=c[i-1,j-1]+X[i];

while (C[i,j]<>'') and (C[i,j][1]='0') do

delete(C[i,j],1,1);

end

else

if length(C[i,j-1])>length(C[i-1,j]) then

C[i,j]:=C[i,j-1]

else

if length(C[i-1,j])>length(C[i,j-1]) then

C[i,j]:=C[i-1,j]

else

if C[i,j-1]>C[i-1,j] then

C[i,j]:=C[i,j-1]

else

C[i,j]:=C[i-1,j];

assign(f,fo);

rewrite(f);

if c[n,m]='' then

begin

if (pos('0',X)>0) and (pos('0',Y)>0) then write(f,0);

end

else

writeln(f,c[n,m]);

close(f);

end

T

e

s

t

0

1

9999999900000000000

8765432100000000

0

0

2

1234567801234567989

989654321087654321

989

0

3

1234567890123456789012345678901234567890123

456789

9876543210987654321098765432109876543210987

654321

989898989

0

4

9876543210987654321012345678901234567890987

6543210987654321012345678901234567890123456

7890123456789098765432109876543210123456789

0123456789098765432109876543210000000000

1234567890123456789098765432109876543210123

4567890123456789098765432109876543210987654

3210987654321012345678901234567890987654321

0987654321012345678901234567890000000000

9876543210987654321012345678901234 5678909876543210987654321098901234 5678901234567890987654321098765432

1012345678901234567890000000000

0

5

0

6

Từ Test 05 đến Test 06 có dữ liệu lớn nên tôi xin đính kèm tài liệu này Các bạn có thể tải về tham khảo

Ngày đăng: 24/07/2019, 04:57

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w