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

Đề thi học sinh giỏi môn tin học lớp 11 potx

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 (119.78 KB, 5 trang )

TRƯỜNG THPT ĐINH CHƯƠNG DƯƠNG ĐỀ THI CHỌN HSG MÔN TIN HỌC
NĂM HỌC 2010-2011
Thời gian: 180 Phút

Sử dụng ngôn ngữ lập trình pascal, lập trình giải các bài toán sau đây:
Bài 1: Sắp xếp (4đ)
Cho số tự nhiên n (n<=100) và dãy số nguyên a1,a2, ,an (bao gồm cả số nguyên âm
cả số nguyên dương). Hãy đỗi chổ các phần tử của dãy sao cho các phần tử dương nằm ở
đầu dãy, các phần tử âm nằm ở cuối dãy. In dãy sau khi đã sắp xếp.
Bài 2: Tìm xâu con dài nhất (6đ)
Nhập vào một xâu bất kỳ từ bàn phím. Hãy cho biết độ dài lớn nhất của xâu con chứa
liên tiếp kí tự ‘a’. In ra màn hình xâu con dài nhất vừa tìm được?
Ví dụ: Xâu nhập vào: aabcaaade

Độ dài max= 3
Xâu con cần tìm là: aaa
Bài 3: Các thao tác trên mảng 2 chiều (6đ)
Tạo mảng 2 chiều A cấp nxn gồm các số nguyên và một số nguyên x. Viết chương
trình thực hiện các công việc sau:
a/ Đếm số lần xuất hiện của x trong A và vị trí của chúng.
b/ Tính tổng các phần tử lớn nhất của mỗi dòng.
c./ Sắp xếp lại mảng theo thứ tự tăng dần như sau:
Bài 4 (4đ) :Cho một xâu kí tự S. Hãy viết chương trình tính xem trong S có bao nhiêu loại kí tự
khác nhau (phân biệt chữ in hoa với chữ in thường). Ví dụ với S là “Pascal” ta có đáp số là 5.
……Hết……
Chú ý: Giám thị không giải thích gì thêm.
Thí sinh không được sử dụng tài liệu.
TRƯỜNG THPT ĐINH CHƯƠNG DƯƠNG
ĐÁP ÁN ĐỀ THI HSG LỚP 11 NĂM HỌC 2010-2011
MÔN TIN HỌC 11
Bài 1(4đ)


PROGRAM BAI1;
USES CRT;
VAR tg,i,j,n:integer;
a:array[1 20] of integer;
BEGIN
Clrscr;
write('Nhap n='); Readln(n);
For i:=1 to n do Read(a[i]);
Readln;
i:=1; j:=n;
Repeat
While a[i]>0 do inc(i);
While a[j]<=0 do dec(j);
If i<j then Begin
tg:=a[i];
a[i]:=a[j];
a[j]:=tg;
End;
Until j<=i;
j:=n;
Repeat
While a[i]>=0 do inc(i);
While a[j]<0 do dec(j);
If i<j then begin
tg:=a[i];
a[i]:=a[j];
a[j]:=tg;
End;
Until j<=i;
for i:=1 to n do Write(a[i]:4);

readln
END.
Bài 2(6đ)
PROGRAM BAI2;
USES CRT;
VAR s:string;
i,max,t,k,d:byte;
BEGIN
clrscr;
Write('nhap xau'); Readln(s);
k:=length(s);
max:=0; t:=0;
for i:=1 to k do
begin
if s[i]='a' then
begin
t:=t+1;
if t>max then
begin
max:=t;
d:=i;
end;
end
else t:=0;
end;
if t>max then max:=t;
for i:=d-max+1 to d do write(s[i]);
readln
END.
Bài 3(6đ)

- Câu a: 2đ
- Câu b: 2đ
- Câu c:2đ
PROGRAM BAI3;
USES CRT;
VAR A: array[1 10,1 10] of integer;
B :array[1 100]of integer;
tg, k, n,i,j,x,dem,S,max:Integer;
BEGIN
Write('Nhap n='); Readln(n);
For i:=1 To n do
begin
For j:=1 To n Do read (a[i,j]);
Readln;
end;
{Câu a: Tìm kiếm phần tử x trong mang A}
Write('Nhap x='); Readln(x);
dem:=0;
Writeln('Vi tri cua x trong mang A: ');
For i:=1 To n Do
For j:=1 To n Do
If a[i,j]=x Then
Begin
Writeln(i,j);
dem:=dem+1;
End;
Writeln('So lan xuat hien cua x trong mang A la: ',dem);
{Câu b: Tính tổng các phần tử lớn nhất của mỗi dòng}
S:=0;
For i:=1 To n Do

Begin
Max:=A[i,1];
For j:=2 To n Do
If max<A[i,j] Then max:=A[i,j];
S:=S+max;
End;
Writeln('Tong cac phan tu lon nhat cua moi dong la: ',S);
{Câu c: Sắp xếp mảng}
{chuyển mảng 2 chiều A thành mảng 1 chiều B}
k:=0;
For i:=1 to n do
For j:=1 to n do
If k<n*n then
begin
k:=k+1;
b[k]:=a[i,j];
end;
{Sắp xếp mảng 1 chiều B theo thứ tự tăng dần}
For i:=1 to n*n-1 do
For j:=i+1 to n*n do
if b[i]>b[j] then
begin
tg:=b[i];
b[i]:=b[j];
b[j]:=tg;
end;
{Chuyển mảng 1 chiều A thành mảng 2 chiều B}
k:=0;
For j:=1 to n do
begin

If j mod 2 =1 then
Begin
for i:=1 to n do
Begin
k:=k+1;
a[i,j]:=b[k];
End;
End
Else
Begin
for i:=n downto 1 do
Begin
k:=k+1;
a[i,j]:=b[k];
End;
End;
End;
{in mảng 2 chiều sau khi sắp xếp}
Writeln('mang sau khi sap xeo la:');
For i:=1 to n do
Begin
For j:=1 to n do write(a[i,j]);
Writeln;
End;
Readln;
END.
Bài 4 (4 điểm)
PROGRAM BAI4;
Var S: string;
i, j, dem: integer;

t: boolean;
BEGIN
Write('Cho mot xau ki tu S: '); Readln(S);
dem:=0;
For i:=1 to length(S) do
Begin
t:=false;
For j:=1 to i-1 do if (S[j]=S[i]) then t:=true;
If not t then dem:= dem+1;
End;
Write('So ki tu khac nhau cua xau S la: ', Dem);
Readln;
END .

×