Đề thi chọn học sinh giỏi cấp tỉnh lớp 12
Trang 1Trang 1
SỞ GIÁO DỤC VÀ ĐÀO TẠO
TUYÊN QUANG
ĐỀ THI CHỌN HỌC SINH GIỎI CẤP TỈNH LỚP 12
NĂM HỌC 2009-2010 Môn: Tin học
Thời gian: 180 phút (Không kể thời gian giao đề)
Đề thi có 02 trang
Tổng quan đề thi:
cùng nhau
Đếm xâu đối xứng
Yên ngựa
Chú ý:
1 Bài thi được làm trên ngôn ngữ lập trình Pascal
2 Chương trình của Bài 1, Bài 2, Bài 3, Bài 4 phải ghi lên đĩa với tên tương ứng là Bai1.pas, Bai2 pas, Bai3 pas, Bai4 pas trong thư mục D đặt tên SBD của mình ví dụ: D:\SBD01\Bai1 pas
Bài 1
Trong kỳ thi vào trường Chuyên, lớp chuyên Hóa học: điểm môn Hóa tính hệ số 3, Toán và Ngữ văn tính hệ số 1; xếp loại kết quả thi theo điểm trung bình (ĐTB) với quy tắc:
- ĐTB dưới 5,0: Yếu
- ĐTB từ 5,0 đến dưới 7,0: Trung bình
- ĐTB từ 7,0 đến dưới 8,0: Khá
- ĐTB từ 8,0 đến 10,0: Giỏi
Lập chương trình tính điểm trung bình và xếp loại kết quả thi của các thí sinh dự thi vào lớp chuyên Hóa học (số lượng học sinh bất kỳ nhập từ bàn phím) và đưa họ tên, điểm trung bình, kết quả xếp loại ra màn hình
Bài 2
Hai số tự nhiên được gọi là hai số nguyên tố cùng nhau nếu ước số chung lớn nhất của hai số đó bằng 1
Yêu cầu: Hãy xác định hai số tự nhiên x, y (1 < x, y < 65535) có phải là hai số nguyên
tố cùng nhau hay không?
Dữ liệu vào: Được lấy từ file văn bản NTCN.INP, có cấu trúc như sau:
Ghi 2 số tự nhiên x, y trên cùng một dòng và cách nhau bởi một kí tự dấu cách
Dữ liệu ra: Ghi ra file văn bản NTCN.OUT, theo cấu trúc như sau:
Nếu x và y là hai số nguyên tố cùng nhau thì ghi số 1, ngược lại thì ghi số 0
Ví dụ:
ĐỀ CHÍNH THỨC
Trang 2Trang 2
Bài 3
Một xâu kí tự được gọi là xâu đối xứng (Palindrome) nếu ta đọc từ trái sang phải hay đọc từ phải sang trái đều giống nhau Một kí tự cũng được coi là một xâu đối xứng Xâu con của S là xâu gồm một số kí tự liên tiếp trong S
Yêu cầu: Cho trước một xâu kí tự S (kí tự đầu và kí tự cuối khác kí tự dấu cách) Hãy
xác định số xâu đối xứng là xâu con của nó
Dữ liệu vào: Được lấy từ file văn bản PALIN.INP gồm nhiều dòng (không quá 100
dòng), mỗi dòng là một xâu có chiều dài không quá 80 kí tự
Dữ liệu ra: Được ghi vào file văn bản PALIN.OUT có số dòng bằng số dòng của
PALIN.INP, mỗi dòng chứa một số nguyên biểu thị số xâu con đối xứng của dòng tương ứng trong PALIN.INP
Ví dụ:
PALIN.INP PALIN.OUT
J IOI MIT TIM
1
4
10
Bài 4
Cho một ma trận hai chiều A cấp m x n Phần tử A[i,j] được gọi là yên ngựa nếu nó là
số lớn nhất trong cột j và là số nhỏ nhất trong hàng i
Yêu cầu: Tìm số phần tử yên ngựa của ma trận A
Dữ liệu vào: Được lấy từ file YENNGUA.INP có cấu trúc như sau:
- Dòng thứ nhất gồm hai số nguyên dương m, n (m,n ≤100)
- m dòng tiếp theo mỗi dòng gồm n số nguyên, các số nguyên cách nhau bởi một dấu cách là ma trận A (A[i,j] có giá trị tuyệt đối ≤ 10000)
Dữ liệu ra: Được ghi vào file YENNGUA.OUT gồm một số nguyên duy nhất là số
lượng yên ngựa trong ma trận A
VÝ dô:
3 4
4 3 6 5
9 -2 -9 4
6 0 7 2
1
(Ví dụ trên có duy nhất một yên ngựa là phần tử A[1,2] )
Cán bộ coi thi không giải thích gì thêm
-HẾT -
Trang 3Trang 3
SỞ GIÁO DỤC VÀ ĐÀO TẠO
TUYÊN QUANG
ĐÁP ÁN ĐỀ THI CHỌN HỌC SINH GIỎI
CẤP TỈNH NĂM 2009 Môn: Tin học Lớp: 12
(Đáp án gồm 01 trang)
Cách chấm điểm:
Dùng các bộ test, chạy trực tiếp chương trình để chấm trực tiếp trên máy: Với các bộ
test sau:
3 4
4 3 6 5
9 -2 -9 4
6 0 7 2
2 2
1 2
2 1
4 5
8 9 5 7 5
6 8 5 6 5
4 2 4 9 3
0 1 3 5 2
Trang 4Trang 4
LƠI GIAI THAM KHAO
Bài 1
Có nhiều phương án giải quyết bài toán này (GV tự nghiên cứu)
Bài 2 Số nguyên tố
Program NTCN;
Const fi='NTCN.inp';
fo='NTCN.out';
Var m,n:Longint;
Procedure doc;
Var f:text;
Begin
Assign(f,fi);
Reset(f);
Readln(f,m,n);
Close(f);
End;
Function Ucln(m,n:Longint):Longint;
Var r:longint;
Begin
r := m mod n;
While r <> 0 do
Begin
m:=n;
n:=r;
r:= m mod n;
end;
Ucln:=n;
End;
Procedure Ghi;
Var f:text;
Begin
Assign(f,fo);
ReWrite(f);
If ucln(m,n) = 1 then
Writeln(f,1)
Else
Writeln(f,0);
Close(f);
End;
BEGIN
Doc;
Trang 5Trang 5
Ghi;
END
Bài 3 Xâu
Program Bai1;
Const fi='PALIN.INP';
fo='PALIN.OUT';
maxN=100;
Var A:array[0 maxN+1] of string;
N:longint;
f,g:text;
Procedure Input;
Var s:string;
Begin
assign(f,fi);
reset(f);
assign(g,fo);
rewrite(g);
n:=0;
while not eof(f) do
begin
readln(f,s);
inc(n);
A[n]:=s;
end;
close(f);
End;
Function Check_Palin(s:string;i,k:longint):boolean; Var temp:string;
j:longint;
Begin
check_palin:=false;
temp:=copy(s,i,k);
for j:=1 to length(temp) div 2 do
if temp[j]<>temp[length(temp)-j+1] then exit; check_palin:=true;
End;
Function Count_Palin(s:string):longint;
Var count,i,k:longint;
Begin
count:=0;
for i:=1 to length(s) do
for k:=1 to length(s)-i+1 do
if check_palin(s,i,k) then inc(count);
count_palin:=count;
Trang 6Trang 6
End;
Procedure Process;
Var i:longint;
Begin
for i:=1 to n do
writeln(g,count_palin(A[i]));
close(g);
End;
BEGIN
Input;
Process;
END
Bài 4 Yên ngựa
var A:array[1 100,1 100] of integer;
maxj,mini:array[1 100] of integer;
M,N,dem :integer;
F:Text;
{**********************}
procedure Doc_file;
var i,j:integer;
f:Text;
Begin
Assign(f,'D:\B2IN.TXT');
Reset(f);
readln(f,M,N);
for i:=1 to M do
Begin
for j:=1 to N do read(f,A[i,j]);
Readln(f);
End;
End;
{***********************}
Procedure Xd_max_cot;
var i,j:integer;
Begin
for i:=1 to N do
maxj[i]:=A[1,i];
for i:=2 to M do
for j:=1 to N do
if A[i,j]>=maxj[j] then maxj[j]:=A[i,j]; End;
{************************}
Procedure Xd_min_dong;
Trang 7Trang 7
var i,j:integer;
Begin
for i:=1 to M do
mini[i]:=A[i,1];
for i:=1 to M do
for j:=2 to N do
if A[i,j]<=mini[i] then mini[i]:=A[i,j];
End;
{*************************}
Procedure count;
var i,j:integer;
Begin
dem:=0;
for i:=1 to M do
for j:=1 to N do
if (A[i,j]=maxj[j]) and (A[i,j]=mini[i]) then inc(dem); End;
{**************************}
procedure Xu_ly;
Begin
Xd_max_cot;
Xd_min_dong;
count;
End;
{*************************}
BEGIN
Doc_file;
Assign(f,'D:\B2OUT.TXT'); rewrite(f);
Xu_ly;
Write(f,dem);
Close(f);
END