Tải bản đầy đủ (.pdf) (4 trang)

Đáp án HSG Tin học lớp 9 Quảng Bình 2017-2018 - Học Toàn Tập

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (420.71 KB, 4 trang )

(1)

1/3



SỞ GD&ĐT QUẢNG BÌNH KỲ THI CHỌN HỌC SINH GIỎI CẤP TỈNH


NĂM HỌC 2017 - 2018



HƯỚNG DẪN CHẤM

LỚP 9 - THCS


Môn thi: TIN HỌC



(Khóa thi ngày 22 tháng 03 năm 2018)



Thời gian làm bài: 150 phút (không kể thời gian giao đề)


I- Phương pháp:



- Giám khảo tạo bộ dữ liệu vào, tính tốn kết quả. Thực hiện chương trình của


học sinh và so sánh kết quả.



- Giám khảo có thể sử dụng chương trình gợi ý dưới đây để tính tốn kết quả


của dữ liệu vào.



- Chương trình học sinh đúng một bộ test, giám khảo cho 0,5 hoặc 0.25 điểm.


Như vậy, nếu một câu có 3 điểm thì giám khảo phải tạo 6 bộ test.



- Nếu chương trình của học sinh đưa ra kết quả khác với đáp án của giám khảo


nhưng vẫn đúng thì giám khảo cho điểm tối đa của bộ test đó.



- Với mỗi câu, giám khảo phải tạo ít nhất một bộ test có dữ liệu lớn.



II- Chương trình gợi ý:



Câu 1: (3.0 điểm) Đếm ký tự chữ số.

COUNT.PAS




const fi='countkt.inp';
fo='countkt.out';
var i,j,n,dem:integer;
f:text;


xau:string;
Procedure doc;
begin


assign(f,fi); reset(f);
read(f,xau);


close(f);
end;


Procedure xuly;
begin


assign(f,fo);
rewrite(f);


for i:=1 to length(xau) do
if (xau[i] in ['0'..'9']) then
inc(dem);


write(F,dem);
close(f);
end;


BEGIN


DOC;
XULY;
END.


Câu 2: (3,0 điểm): Tổng nguyên tố.

SPRIME.PAS



Program Tong_nguyen_to;
const fi='SPRIME.inp';
fo='SPRIME.out';
Var i,n:integer;


f,g:text;


Function NT(n:integer):Boolean;
Var ok: Boolean;



(2)

2/3


ok:=true;


For i:=2 to n-1 do if (n mod i) = 0 then ok:=ok and false;
if n>=2 then NT:=ok else NT:=false;


End;
Begin


Assign(f,fi);
Reset(f);
Read(f,n);
Assign(g,fo);
Rewrite(g);



For i:=2 to n div 2 do if (NT(i) and NT(n-i)) then
Writeln(g,n,' = ',i,' + ',n-i);


Close(f);
Close(g);
End.


Câu 3 (2.0 điểm): Bộ tộc

CLAN.PAS



{$MODE OBJFPC}
{$R+$B-}


const


fi = 'clan.inp';
fo = 'clan.out';
nm = 1000000;
var


a : array[1..nm] of longint;
n : longint;


f : text;
procedure Input;
var i:longint;
begin


assign(f,fi); reset(f);
readln(f,n);



for i:=1 to n do read(f,a[i]);
close(f);


end;


procedure quick_sort(dau,cuoi:longint);
var chot,i,j,tg:longint;


begin


if dau>=cuoi then exit;
i:=dau;


j:=cuoi;


chot:=a[(dau+cuoi) div 2];
repeat


while a[i]<chot do inc(i);
while a[j]>chot do dec(j);
if i<=j then


begin


tg:=a[i]; a[i]:=a[j]; a[j]:=tg; inc(i); dec(j);
end;


until i>j;



quick_sort(dau,j);
quick_sort(i,cuoi);
end;



(3)

3/3


var i,kq,d:longint;


begin
input;


quick_sort(1,n);
kq:=0;


d:=1;


for i:=1 to n do
if a[i]=d then
begin


inc(kq); d:=1;
end


else inc(d);


assign(f,fo); rewrite(f);
writeln(f,kq);


close(f);
end;



BEGIN


PROCESS;
END.


Câu 4 (2.0 điểm): Chữ số thứ N

NUMBER.PAS



Const fi ='number.inp';
fo ='number.out';


cs:array[1..8] of longint = (9, 180, 2700, 36000, 450000, 5400000,
63000000, 720000000);


Var n : longint;
f,g :text;


Function num(n:longint):char;
var k, so, mu : longint;
s : string;


Begin


k:=1; mu:=1;


while (k<9)and(cs[k]<n) do
begin


n:=n-cs[k];


inc(k); mu:=mu*10;


end;


if mu=1 then so:=n div k


else so:=n div k+mu+ord(n mod k>0)-1;
str(so,s);s:=s[k]+s;


num:=s[n mod k+1];
End;


BEGIN


assign(f,fi); reset(f);
assign(g,fo); rewrite(g);
while not seekeof(f) do
begin


readln(f,n);


writeln(g,num(n));
end;



(4)



×