[r]
Trang 1Sở Giáo Dục & Đào Tạo NGhệ an
TRờng THPT DTNT Quỳ HợP
(Đề thi gồm có 02 trang)
Kỳ thi học sinh giỏi trờng lớp 11 THPT
năm học 2011 - 2012
Môn thi: tin học
Hình thức thi: Thực hành
Thời gian: 180 phút (không kể thời gian giao đề)
Bài 1: (7,0 điểm) Đếm từ
Cho 1 xâu s, đếm xem xâu s có bao nhiêu từ (từ là 1 dãy các kí tự liên tiếp,
không chứa dấu cách)
Dữ liệu vào: File văn bản Demtu.inp gồm 1 số dòng mỗi dòng là 1 xâu kí tự
không quá 255 kí tự
Kết quả ghi ra: File văn bản Demtu.out mỗi dòng là 1 số nguyên dơng tơng ứng
với số từ của xâu dữ liệu vào
Ví dụ:
theo thứ tự tăng dần
Dữ liệu vào: File văn bản SX.inp:
- Dòng đầu tiên ghi số nguyên m
- Dòng thứ 2 ghi m số nguyên mỗi số cách nhau một dấu cách
Kết quả ghi ra: File văn bản SX.out là dãy đã đợc sắp xếp
Ví dụ:
Lop Tin hoc File van ban 1
Thi HSG Tin hoc 11
3 4 5
Trang 2Bài 3 (7,0 điểm) Tổng cặp số
a i + a j = x.
1 Ê i < j Ê n.
Dữ liệu vào: Từ file văn bản SUMX.INP:
Dòng đầu tiên chứa số nguyên n.
N dòng tiếp theo chứa n số nguyên a 1 , a 2 , , a n (với mọi i = 1, 2, , n)
Dòng cuối cùng chứa số nguyên x.
Kết quả Ghi ra: file văn bản SUMX.OUT, một số nguyên duy nhất là số cặp tìm
đợc
Ví dụ:
Họ và tên thí sinh: Số báo danh:
Chú ý: - Chơng trình giải các bai1, bài 2, bài 3 lần lợt ghi lên đĩa với các tên
Bai1.pas; Bai2.pas; Bai3.pas.
-Sở Giáo Dục & Đào Tạo NGhệ an
TRờng THPT DTNT Quỳ HợP Kỳ thi học sinh giỏi trờng lớp 11 THPT năm học 2011 - 2012
ĐÁP ÁN TIN 11
B i 1: à Đếm từ
Var f1,f2:text;
5
4 2 1 3 9
1 2 3 4 9
9 5 12 7 10 9 1 2 3 11 13
3
Trang 3s:string;
dem,i:byte;
Begin
Assign(f1,'demtu.inp');Reset(f1);
Assign(f2,'demtu.out');Rewrite(f2);
while not eof(f1) do
Begin
dem:=0;
Readln(f1,s);
for i:=1 to length(s)-1 do
if(s[i]<>‘ ‘) and(s[i+1]=‘ ‘) then inc(dem); if(s[length(s)]<>‘ ‘) then inc(dem);
writeln(f2,dem);
End;
Close(f1);
Close(f2);
End
B i 2 à : S¾p xÕp d·y theo thø tù t¨ng dÇn
Var f1,f2:text;
tg,m,i,j:integer;
a:array[1 100] of integer;
Begin
Assign(f1,'sapxep.inp');Reset(f1);
Read(f1,m);
Readln(f1);
for i:=1 to m do read(f1,a[i]);
Assign(f2,'sapxep.out');Rewrite(f2);
for i:=1 to m-1 do
for j:=i+1 to m do
if a[i]>a[j] then
Begin
tg:=a[i];
a[i]:=a[j];
a[j]:=tg;
End;
for i:=1 to m do write(f2,a[i],#32);
Close(f1); Close(f2);
End
B i 3 à : Tæng cÆp sè
Var n,i,j,x,dem:integer;
a:array[1 100] of integer;
f1,f2:text;
Begin
Assign(f1,‘Sumx.inp’);
Reset(f1);
Read(f1,n);
For i:=1 to n do readln(f1,a[i]);
Read(f1,x);
dem:=0;
for i:=1 to n-1 do
for j:=2 to n do
if (a[i]+a[j])=x then dem:=dem+1;
Assign(f2,‘Sumx.out’);
Rewrite(f2);
write(f2,dem,#32);
Close(f1);
Close(f2);
End