Tải bản đầy đủ

Đề thi học sinh giỏi môn tin học lớp 12 tỉnh quảng bình năm học 2015 2016(có đáp án)

SỞ GD&ĐT QUẢNG BÌNH

KÌ THI CHỌN HSG TỈNH NĂM HỌC 2015-2016
Khóa thi ngày 23 - 3 - 2016
ĐỀ CHÍNH THỨC
Môn: Tin học
LỚP 12 THPT
Họ và tên: ………………………….. Thời gian: 180 phút (không kể thời gian giao đề)

Số báo danh: ………..……………...

Đề thi gồm có 2 trang

ĐỀ RA
Sử dụng ngôn ngữ lập trình Turbo Pascal để lập trình giải các bài toán sau:
Câu 1: (3.0 điểm) Đếm ký tự chữ số.
DEMKT.PAS
Cho một xâu ký tự St có độ dài tối đa 255 ký tự, các ký tự được lấy từ tập:
‘a’ .. ‘z’; ‘A’ .. ‘Z’; ‘0’ .. ‘9’ và ký tự dấu cách.
Yêu cầu: Đếm số lần xuất hiện của ký tự chữ số có trong xâu St.
Dữ liệu vào: Cho trong file văn bản DEMKT.INP, có cấu trúc như sau:

- Dòng 1: Ghi xâu ký tự St.
Dữ liệu ra: Ghi ra file văn bản DEMKT.OUT, theo cấu trúc như sau:
- Dòng 1: Ghi ra số lần xuất hiện của ký tự chữ số có trong xâu St.
Ví dụ:
DEMKT.INP
DEMKT.OUT
Ky thi HSG lop 12 thang 3 nam 2016
7

Bài 2: (3,5 điểm) Hoán vị
HOANVI.PAS
Cho số nguyên dương n trong khoảng 1..9.
Yêu cầu: Tìm tất cả các hoán vị của 1..n. Hoán vị được sắp xếp tăng theo thứ tự từ
điển và các số được ghi liền nhau (không có dấu cách), thí dụ 123 < 132.
Dữ liệu vào: Cho file văn bản HOANVI.INP có cấu trúc như sau:
- Dòng 1: Chứa số nguyên dương (n ≤ 9)
Dữ liệu ra: Ghi ra file văn bản HOANVI.OUT có cấu trúc như sau:
- Ghi trên nhiều dòng, mỗi dòng là một hoán vị của dãy (1, 2, ..., n)
HOANVI.INP HOANVI.OUT
3
123
132
213
231
312
321

1


Câu 2: (3,5 điểm) Đặt vé vào sân NouCamp
NOUCAMP.PAS
NouCamp là một sân bóng lớn. Sân có N ghế ngồi, các ghế được đánh số thứ
tự từ 1 đến N.
Sắp tới, sân NouCamp sẽ diễn ra trận đấu giữa hai đội bóng Barcelona và
Alentico. Hiện nay, một số ghế trên sân đã được khán giả đặt mua làm chỗ ngồi.
Yêu cầu: Hãy kiểm tra xem trên sân còn những ghế nào chưa được mua vé đặt chỗ.
Dữ liệu vào: Cho trong file văn bản NOUCAMP.INP, có cấu trúc như sau:
- Dòng 1: Ghi hai số nguyên dương N M. Trong đó: N là số lượng ghế có trong sân.
M là số lượng ghế đã được khán giả mua vé đặt chỗ. Hai số được ghi cách nhau ít

nhất một dấu cách. (Lưu ý : N chia hết cho 8; 8 ≤ N ≤ 400000; 1 ≤ M ≤ N).
- Dòng 2: Ghi M số nguyên dương a1, a2, …, am, là chỉ số của M ghế đã được khán giả
mua vé đặt chỗ. Các số được ghi cách nhau ít nhất một dấu cách.
Dữ liệu ra: Ghi ra file văn bản NOUCAMP.OUT, theo cấu trúc như sau:
- Dòng 1: Ghi K số nguyên dương b1, b2, …, bk, là chỉ số của các ghế trên sân chưa
được mua vé đặt chỗ (K = N-M). Các số được ghi theo thứ tự tăng dần và cách nhau
ít nhất một dấu cách.
Ví dụ:
NOUCAMP.INP
16 10
2 3 6 7 8 9 10 12

NOUCAMP.OUT
1 4 5 11 13 14
15 16

==HẾT==

2


HƯỚNG DẪN VÀ ĐÁP ÁN CHẤM
ĐỀ THI CHỌN HSG LỚP 12 THPT –NĂM HỌC 2015-2016
Môn: Tin học
Khóa thi ngày 23 - 3 - 2015
I- Phương pháp:

- Giám khảo tạo bộ dữ liệu vào, tính toá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 toán kết quả của
dữ liệu vào.
- Đối với câu 1: Giám khảo phải tạo được 06 bộ test, chương trình học sinh đúng
01 bộ test giám khảo cho 0.5 điểm.
- Đối với câu 2:
+ Giám khảo phải tạo được 07 bộ test, chương trình học sinh đúng 01 bộ test
thì giám khảo cho 0.5 điểm.
- Đối với câu 3:
+ Giám khảo phải tạo được 07 bộ test, chương trình học sinh đúng 01 bộ test
thì giám khảo cho 0.5 điểm.
+ Giám khảo phải tạo bộ test.
- 1 bộ test: 1<=N<=255
- 1 bộ test: 300<=N<=32000
- 2 bộ test: 35000<=N<=64000
- 3 bộ test: 65000<=N<=400000
II- Chương trình gợi ý:
const
fi='demkt.inp';
fo='demkt.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.

3


{$r+}
program chuongtrinhhoanvi;
{$B-}
uses crt;
const fi='hoanvi.inp';
fo='hoanvi.out';
MN = 10;
var
s: array[0..MN] of byte;
n:byte;
f,g:text;
function Next(m: integer): Boolean;
var
i, j,t: integer;
begin
Next := false; i := m-1;
while (s[i] > s[i+1]) do i:= i-1;
if i = 0 then exit;
j := m;
while (s[j] < s[i]) do j := j-1;
t:= s[i]; s[i]:= s[j]; s[j]:= t;
i:= i+1; j:= m;
while i < j do
begin
t:= s[i];s[i]:= s[j]; s[j]:= t;
i:= i+1; j:= j-1;
end;
Next:= true;
end;
procedure hoanvi(m: integer);
var
d: longint;
i: integer;
begin
if (m < 1) or (m > MN) then exit;
assign(g,fo); rewrite(g);
d := 0;
for i := 0 to m do s[i]:= i;
repeat
d := d+1;
for i:= 1 to m do write(g, s[i]);
writeln(g);
until not (next(m));
{writeln(g,' Tong cong ',d, ' hoan vi');
close(g);
end;
BEGIN
assign(f,fi); reset(F);
READ(f,n);
close(f);
hoanvi(n);
END.

}

{$r+}
const
fi='noucamp.in1';
fg='noucamp.out';
maxn=51000;
type mmc=array[1..maxn] of byte;

4


var a:mmc;
ti,n,m:longint;
procedure xl;
var
f:text;
i,x:longint;
by,bi:word;
begin
fillchar(a,sizeof(a),0);
assign(f,fi);reset(f);
readln(f,n,m);
for i:=1 to m do
begin
read(f,x);
by:=(x div 8)+1;
bi:= x mod 8;
if bi=0 then
begin
bi:=8;
by:=by-1;
end;
a[by]:=a[by] or (1 shl (bi-1));
end;
close(f);
end;
procedure xuat;
var f:text; i,j:longint;
begin
assign(f,fg);rewrite(f);
{writeln(f,n-m);}
for i:= 1 to n div 8 do
for j:=1 to 8 do
if ((a[i] shr (j-1)) and 1)=0 then write(f,(i-1)*8+j,' ');
close(f);
end;
begin
xl;
xuat;
end.

5



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×