Trờng thpt minh khai đề thi chọn hsg lớp 11 năm học 2010-2011
Môn thi: Tin Học 11 Thời gian: 150 Phút Ngày thi: 25/12/2010
-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
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
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
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:
Trang 2
Trờng thpt minh khai
Đáp án đề thi HSG lớp 11 năm học 2010-2011
Môn tin học 11
Bài 1(6đ)
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
Trang 3Bµi 3(10®)
- C©u a: 2®
- C©u b: 3®
- C©u c:3®
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
Trang 4If 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
Trang 5for 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]);
End;
Readln;
End