Tải bản đầy đủ (.doc) (3 trang)

Download đề và đáp án thi học sinh giỏi môn tin học lớp 11 2008 2009 tỉnh quảng bình (khối không chuyên)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (115.38 KB, 3 trang )

Sở GIáO DụC Và ĐàO TạO
QUảNG BìNH
Đề chính thức
SBD

kỳ thi CHọN học sinh giỏi lớp 11
năm học 2008-2009

môn: tin học KHốI không CHUYÊN

Thời gian 180 phút, không kể thời gian giao đề
đề ra

Sử dụng ngôn ngữ lập trình Pascal để lập trình giải các bài toán sau:
Câu 1 (3,0 điểm): Tính tổng giá trị các chữ số
TONG.PAS
Cho một số nguyên dơng N.
Yêu cầu: Hãy tính tổng giá trị các chữ số của N.
Dữ liệu vào: Cho trong file văn bản TONG.INP có cấu trúc nh sau:
- Dòng 1: Ghi số nguyên dơng N (10 < N < 109).
Dữ liệu ra: Ghi ra file văn bản TONG.OUT theo cấu trúc nh sau:
- Dòng 1: Ghi ra tổng giá trị các chữ số của N.
Ví dụ:
TONG.INP
TONG.OUT
13
4
Câu 2 (3,5 điểm): Tìm kí tự
KITU.PAS
Cho một xâu St gồm các kí tự từ 'a' ... 'z' có độ dài tối đa không quá 255 kí tự.
Yêu cầu: Hãy tìm tất cả các kí tự xuất hiện trong xâu St ít nhất hai lần.


Dữ liệu vào: Cho trong file văn bản KITU.INP có cấu trúc nh sau:
- Dòng 1: Ghi các kí tự của xâu St, các kí tự đợc viết liền nhau.
Dữ liệu ra: Ghi ra file văn bản KITU.OUT theo cấu trúc nh sau:
- Dòng 1: Nếu không tìm đợc kí tự thỏa mãn yêu cầu thì ghi số -1. Ngợc lại thì ghi các kí tự tìm đợc theo thứ tự tăng dần của mã ASCII, các kí tự ghi liền nhau.
Ví dụ:
KITU.INP
KITU.OUT
KITU.INP
KITU.OUT
hchcsucaaf
ach
hkcsuaf
-1
Câu 3 (3,5 im): Sp xếp dãy s giảm dần
SXDS.PAS
Cho dãy số gồm N phần tử có giá trị nguyên dơng a1, a2, ..., aN
Yêu cầu: Hãy sắp xếp dãy số theo thứ tự giảm dần.
Dữ liệu vào: Cho trong file văn bản SXDS.INP có cấu trúc nh sau:
- Dòng 1: Ghi số nguyên dơng N (1 N 32000).
- Dòng 2: Ghi N số nguyên dơng xi là giá trị của các phần tử trong dãy. Các số đợc ghi cách nhau
ít nhất một dấu cách (0 < xi 16000; 1 i N).
Dữ liệu ra: Ghi ra file văn bản SXDS.OUT theo cấu trúc nh sau:
- Dòng 1: Ghi N số nguyên dơng là giá trị của N phần tử trong dãy sau khi đã sắp xếp. Các số đợc
ghi cách nhau ít nhất một dấu cách.
Giới hạn thời gian thực hiện chơng trình không quá 0,5 giây đối với một bộ dữ liệu vào. Trong đó
có 85% bộ dữ liệu vào có giá trị của N> 16000.
Ví dụ:
SXDS.INP
SXDS.OUT
7

16000 10 9 6 2 2 1
6 9 2 10 2 16000 1
Sở GIáO DụC Và ĐàO TạO
QUảNG BìNH

Hớng dẫn chấm

==== Hết ====
kỳ thi CHọN học sinh giỏi lớp 11
năm học 2008-2009

môn: tin học KHốI không CHUYÊ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.
1


- Chơng trình học sinh đúng một bộ test, giám khảo cho 0,5 điểm. Nh vậy, nếu một bài
có 3 điểm thì giám khảo phải tạo 6 bộ test.
- Đối với câu 3: Giới hạn thời gian thực hiện chơng trình không quá 0,5 giây đối với
một bộ dữ liệu vào. Trong đó có 85% bộ dữ liệu vào có giá trị của N> 16000.
II- Chơng trình gợi ý:
Câu 1 (3,0 điểm): Tính tổng giá trị các chữ số
Program tongcs;
Const
fi='Tong.inp';

fo='Tong.out';
Var N:Longint;
Procedure Doc;
Var f:Text;
Begin
Assign(f,fi);
Reset(f);
Readln(f,N);
Close(f);
End;
Function Tong:Longint;
Var T:Longint;
Begin
T:=0;
While N > 0 do
Begin
T:=T+N mod 10;
N:= N Div 10;
End;
Tong:=T;
End;
Procedure Ghi;
Var f:Text;
Begin
Assign(f,fo);
ReWrite(f);
Write(f,tong);
Close(f);
End;
BEGIN

Doc; Ghi;
END.

Câu 2 (3,5 điểm): Tìm kí tự

Program Tim_ki_tu;
Const
fi='Kitu.inp';
fo='Kitu.out';
Type
mmc=Array['a'..'z'] of Byte;
Var A:mmc;
St:String;
f:text;
Procedure Doc;
begin
assign(f,fi);
reset(f);
readln(f,st);
close(f);
end;
procedure xl;
var i:byte;
begin
fillchar(a,sizeof(a),0);
for i:=1 to length(st) do a[st[i]]:=a[st[i]] +1;
end;
procedure xuat;
var ch:char; kt:boolean;
begin

assign(f,fo);
rewrite(f);
kt:=false;
for ch:='a' to 'z' do

2


if a[ch]>=2 then
begin
kt:=true;
write(f,ch);
end;
if kt=false then write(f,-1);
close(f);
end;
Begin
doc;xl;xuat;End.

C©u 3 (3,5 ®iÓm): S¾p xÕp d·y sè gi¶m dÇn
Program Sap_xep_day_so;
Const fi='SXDS.inp';
fo='SXDS.out';
MaxN=16000;
Type mmc = Array[1..MaxN] of word;
Var
A:mmc;
N:word;
Procedure Doc;
Var f:Text;

i,so:word;
Begin
Fillchar(A,sizeof(A),0);
Assign(f,fi);
Reset(f);
Readln(f,N);
For i:=1 to N do
Begin
Read(f,so);
A[so]:= A[so] + 1;
End;
Close(f);
End;
Procedure Ghi;
Var i,j:Word;
f:Text;
Begin
Assign(f,fo);
Rewrite(f);
For i:=maxn downto 1 do
For j:=1 to A[i] do Write(f,i,' ');
Close(f);
End;
BEGIN
Doc; Ghi;
END.

3




×