You are on page 1of 7

SỞ GD&ĐT HẢI DƯƠNG ĐỀ THI CHỌN HỌC SINH GIỎI TỈNH

TRƯỜNG THPT ĐOÀN THƯỢNG LỚP 12 THPT

MÔN: TIN HỌC


Thời gian làm bài: 180 phút
(Đề này gồm 5 câu, 02 trang)

TỔNG QUAN VỀ CÁC BÀI THI TRONG ĐỀ


Giới hạn thời
Tên file Dữ liệu Dữ liệu Điểm của
Câu gian
chương trình nhập xuất bài
chạy 1 test
1 BAI1.* bàn phím màn hình 2.5 điểm 1 giây
2 BAI2.* bàn phím màn hình 2.5 điểm 1 giây
3 BAI3.* bàn phím màn hình 2.0 điểm 1 giây
4 BAI4.* SAPXAU.INP SAPXAU.OUT 1.5 điểm 1 giây
5 BAI5.* DAYCON.INP DAYCON.OUT 1.5 điểm 1 giây
Yêu cầu các thí sinh đọc kỹ phần hướng dẫn dưới đây:
 Dấu (*) trong tên file chương trình được thay thế bằng PAS hoặc CPP tuỳ theo thí
sinh viết chương trình bằng ngôn ngữ Pascal hoặc C++. Ví dụ, nếu học sinh viết
bằng ngôn ngữ Pascal thì tên các bài lần lượt là BAI1.PAS, BAI2.PAS, BAI3.PAS,
BAI4.PAS, BAI5.PAS
 Với bài 4 và bài 5 tên file dữ liệu nhập và dữ liệu xuất đặt đúng như phần tổng
quan ở trên (không có đường dẫn kèm theo)
************************************************************************
HÃY LẬP TRÌNH GIẢI CÁC BÀI TOÁN SAU:
Câu 1: (2.5 điểm)
Nhập vào thời gian 1 công việc nào đó là x giây. Hãy chuyển đổi và viết ra màn hình
số thời gian trên dưới dạng bằng bao nhiêu giờ, bao nhiêu phút, bao nhiêu giây.
Program DOI_GIO_PHUT_GIAY;
Dữ liệu: Nhập vào từ bàn phím số giây là x.
Kết quả: Ghi ra màn hình số giờ, số phút, số giây x.
Câu 2: (2.5 điểm)
Lập trình tính giá trị biểu thức sau:
S=1 + 1/2! - 1/3! -1/4!+ ... + 1/n!
Dữ liệu: Nhập vào từ bàn phím số nguyên dương n.
Kết quả: Ghi ra màn hình giá trị biểu thức S.
Câu 3: (2.0 điểm)
Viết chương trình cho phép nhập một dãy gồm n số nguyên. Nhập thêm một số và chèn
thêm vào dãy sau phần tử k.
Dữ liệu: Nhập vào từ bàn phím dãy số nguyên n và giá trị cần chèn vào vị trí k.
Kết quả: Ghi ra màn hình dãy số sau khi được chèn.
Câu 4: (1.5 điểm) Sắp xếp xâu. SAPXAU.PAS
Người ta định nghĩa: Từ là một nhóm ký tự đứng liền nhau.

1
Cho một xâu St gồm các ký tự lấy từ tập ‘a’ .. ‘z’ và dấu cách. Xâu không quá 20
từ, mỗi từ dài không quá 10 ký tự.
Yêu cầu: Sắp xếp các từ của xâu ký tự theo thứ tự không giảm của độ dài các từ trong xâu
St.
Dữ liệu vào: Cho trong file văn bản SAPXAU.INP, có cấu trúc:
- Dòng 1: Ghi một xâu ký tự St (có ít nhất 1 từ).
Dữ liệu ra: Ghi ra file văn bản SAPXAU.OUT, theo cấu trúc:
- Dòng 1: Ghi các từ của xâu ký tự sau khi được sắp xếp. Các từ được ghi cách nhau đúng
một dấu cách.
Ví dụ:
SAPXAU.INP SAPXAU.OUT
acb abcde abcd abc acb abc abcd abcde

Câu 5: (1.5 điểm) Dãy con liên tiếp. DAYCON.PAS


Cho dãy số nguyên dương gồm N phần tử A1, A2,…, An.
Yêu cầu: Hãy liệt kê tất cả các dãy con gồm các phần tử đứng liên tiếp của dãy trên sao
cho tổng giá trị các phần tử của dãy con đó bằng M.
Dữ liệu vào: Cho trong file văn bản DAYCON.INP, có cấu trúc như sau:
- Dòng 1: Ghi 2 số nguyên dương N và M. Hai số được ghi cách nhau ít nhất một dấu
cách. (1 N 1000; 1 M 32000)
- Dòng 2: Ghi N số nguyên dương Ai. Các số được ghi cách nhau ít nhất một dấu cách. (1
Ai 10000 )
Dữ liệu ra: Ghi ra file văn bản DAYCON.OUT, gồm nhiều dòng. Mỗi dòng ghi một dãy
con tìm được. Các dãy con được ghi theo thứ tự xuất hiện của nó trên dãy ban đầu. Các số
trên cùng một dòng được ghi cách nhau ít nhất một dấu cách.
Nếu không tìm được dãy con thỏa mãn điều kiện thì ghi ra file một số: 0.
Ví dụ:
DAYCON.INP DAYCON.OUT
11 6 3 1 2
1 4 3 1 2 1 6 5 1 4 1 6
5 1
1 4 1
5 6 0
1 2 5 2 1

-----HẾT-----

SỞ GD&ĐT HẢI DƯƠNG HƯỚNG DẪN CHẤM


TRƯỜNG THPT ĐOÀN THƯỢNG ĐỀ THI CHỌN HỌC SINH GIỎI TỈNH
LỚP 12 THPT

2
MÔN: TIN HỌC
(Hướng dẫn chấm gồm 05 trang)

TỔNG QUAN VỀ CÁC BÀI THI TRONG ĐỀ


Tên file Giới hạn
Câ Dữ liệu Dữ liệu Điểm của
chương thời gian
u nhập xuất bài
trình chạy 1 test
1 BAI1.* bàn phím màn hình 2.5 điểm 1 giây
2 BAI2.* bàn phím màn hình 2.5 điểm 1 giây
3 BAI3.* bàn phím màn hình 2.0 điểm 1 giây
4 BAI4.* SAPXAU.INP SAPXAU.OUT 1.5 điểm 1 giây
5 BAI5.* DAYCON.INP DAYCON.OUT 1.5 điểm 1 giây

CODE GIẢI CÁC BÀI TOÁN:


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 10 bộ test, chương trình học sinh đúng 01
bộ test giám khảo cho 0.25 điểm.
- Đối với câu 2: Giám khảo phải tạo được 10 bộ test, chương trình học sinh đúng 01
bộ test giám khảo cho 0.25 điểm.
- Đối với câu 3: Giám khảo phải tạo được 08 bộ test, chương trình học sinh đúng 01
bộ test giám khảo cho 0.25 điểm.
- Đối với câu 4: 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.25 điểm.
- Đối với câu 5: 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.25 điểm.
II- Chương trình gợi ý:
Câu 1: Program BAI1;
Var gio, phut,giay, x: longint;
Begin
Writeln('DOI SANG GIO PHUT GIAY');
Writeln('--------------------------------------');
Write('Nhap vao so giay: ');
readln(x); gio:= x div 3600;
x:=x mod 3600; phut:=x
div 60; x:=x mod 60;
Writeln('Ket qua = ', gio,'gio : ', phut, 'phut : ', x, 'giay');
Readln;
End.
Câu 2: program BAI2;

3
var gt,i,n,dau:interger; S:real;
BEGIN 
write('Nhap N '); readln(n);
gt:=1; S:=0;dau=1;
FOR i:=1 to n do
Begin gt:=gt*i; S:=S+dau*1/gt; dau=-dau;
 end;
write('Tong S la: ',S:6:3);
readln;
end. 
Câu 3:
Program BAI3;
var M: array[1..100] of integer;
i,n,k:integer;
begin
write('Nhap : ');readln(n);
for i:=1 to n do
begin
write('M[',i,']='); readln(M[i]);
end;
write('Vi tri chen: ');readln(k);
for i:=n+1 downto k+1 do M[i]:=M[i-1];
write('Nhap so can chen: '); readln(M[k]);
for i:=1 to n+1 do write(M[i],', ');
readln
end.
Câu 4: Sắp xếp xâu
Program BAI4;
program sap;
const f1='sapxau.inp';
f2='sapxau.out';
type mm=array[1..20] of string;
var a:mm;
s,st,tg:string;
d:integer;
f:text;
procedure doc;
begin
assign(f,f1);
reset(f);
readln(f,s);
close(f);
end;
procedure xl;

4
var x,j,i:integer;
n:byte;
begin
n:=length(s);
while s[1]=' ' do delete(s,1,1);
while s[n]=' ' do delete(s,n,1);
x:=pos(' ',s);
while x>0 do
begin
delete(s,x,1);
x:=pos(' ',s);
end;
s:=s+' ';
for i:=1 to 20 do a[i]:='';
i:=0;
while s<>'' do
begin
i:=i+1;
a[i]:=copy(s,1,pos(' ',s)-1);
delete(s,1,pos(' ',s));
end;
d:=i;
{ for j:=1 to d do
begin
i:=1;st:='';
while (s[i]<>' ')do
begin
st:=st+s[i];
i:=i+1;
end;
delete(s,1,i);
a[j]:=a[j]+st;
end;}
for i:=1 to d-1 do
for j:=i+1 to d do
if length(a[i])>length(a[j]) then
begin
tg:=a[i];a[i]:=a[j];a[j]:=tg;
end;
end;

procedure xuat;
var i:integer;
begin

5
assign(f,f2);
rewrite(f);
for i:=1 to d do write(f,a[i],' ');
close(f);
end;
begin
doc;xl;xuat;
end.
Câu 5: Dãy con liên tiếp
program day_con;
const fi='daycon.inp';
f0='daycon.out';
type mm=array[1..10000] of integer;
var f:text;
a:mm;
n,m:integer;
procedure doc;
var i:integer ;
begin
assign(f,fi);
reset(f);
read(f,n,m);
for i:=1 to n do read(f,a[i]);
close(f);
end;
procedure xuli;
var i,j,l:integer;
t:longint;
kt:boolean;
begin
assign(f,f0);
rewrite(f);
kt:=false;
for i:=1 to n do
begin
j:=i;
t:=0;
while (t<m )and (j<=n) do
begin
t:=t+a[j];
j:=j+1;
end;
if t=m then
begin

6
kt:=true;
for l:=i to j-1 do write(f,a[l],' ');
writeln(f);
end;
end;
if kt=false then write(f,0);
close(f);
end;
begin
doc; xuli;
end.
===HẾT===

You might also like