- 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 [r]
(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 - 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 liệu vào, tính tốn kết Thực chương trình học sinh so sánh kết
- Giám khảo sử dụng chương trình gợi ý để tính toán kết của liệu vào
- Chương trình học sinh test, giám khảo cho 0,5 0.25 điểm Như vậy, câu có điểm giám khảo phải tạo test
- Nếu chương trình học sinh đưa kết khác với đáp án giám khảo nhưng giám khảo cho điểm tối đa test
- Với câu, giám khảo phải tạo test có 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) 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 if (n mod i) = 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 if (NT(i) and NT(n-i)) then Writeln(g,n,' = ',i,' + ',n-i);
Close(f); Close(g); End
Câu (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 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 inc(i); while a[j]>chot 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 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 (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) 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) begin
readln(f,n);
writeln(g,num(n)); end;
(4)