1. Trang chủ
  2. » Trung học cơ sở - phổ thông

Đề thi học sinh giỏi tin lớp 12

9 194 1

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 60 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Xâu S’ đợc tạo ra từ xâu S bằng cách đổi chỗ kí tự ở vị trí i và kí tự ở vị trí j của xâu S sao cho xâu S’ đợc sắp tăng dần theo thứ tự từ điển.. Hãy tìm cách tạo ra xâu S’ nh trên sao c

Trang 1

Sở giáo dục - đào tạo QB Kỳ thi chọn họcSinh Giỏi lớp 12

Trờng thpt chuyên qb Năm học 2007-2008

SBD: Môn: Tin học Đề thi đề nghị Thời gian làm bài: 180

phút.

Đề 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) Sắp xếp xâu - Sapxep.PAS

Một xâu kí tự S bao gồm N (N < 255) kí tự đợc lấy từ tập kí

tự sau: ‘A’, ‘B’, ‘C’ Xâu S’ đợc tạo ra từ xâu S bằng cách đổi chỗ

kí tự ở vị trí i và kí tự ở vị trí j của xâu S sao cho xâu S’ đợc sắp tăng dần theo thứ tự từ điển Hãy tìm cách tạo ra xâu S’ nh trên sao cho số lần đổi chỗ các kí tự ở vị trí i và kí tự ở vị trí j trong xâu S là ít nhất

Dữ liệu vào: Cho trong file sapxep.inp có cấu trúc nh sau:

- Dòng 1: Ghi xâu S.

Dữ liệu ra: Ghi trong file sapxep.out theo cấu trúc nh sau:

- Dòng 1: Ghi số m là số lần đổi chỗ ít nhất các kí tự ở vị trí

i và kí tự ở vị trí j trong xâu S.

- m dòng tiếp theo mỗi dòng ghi 2 số i và j cách nhau một kí

tự trắng, thể hiện việc đổi chỗ kí tự ở vị trí i và kí tự ở vị trí j trong xâu S.

Ví dụ:

1 3

4 7

2 9

5 9

Câu 2: (3 điểm) Chuỗi hạt - chuoihat.PAS

Trong một file văn bản có tên là CHUOIHAT.INP có biểu diễn một chuỗi hạt, mỗi hạt có thể nhận một trong số các màu mã số từ

1 đến 30 Lập trình tìm một điểm để cắt chuỗi rồi căng thẳng ra sao cho các hạt cùng màu ở hai đầu là lớn nhất

Trang 2

Dữ liệu vào: Chuỗi đợc thể hiện trong file CHUOIHAT.INP dới

dạng hình thoi, dòng đầu tiên và dòng cuối cùng có mỗi hạt một dòng Mỗi dòng còn lại có 2 hạt cách nhau một kí tự trắng (Chuỗi hạt có tối đa là 1000 hạt) Các hạt của chuỗi đợc đánh số bắt

đầu từ hạt trên cùng và theo chiều kim đồng hồ.

Kết quả: ghi ra file CHUOIHAT.OUT

- Ghi 3 số i j t các số cách nhau một kí tự trắng (i và j là vị trí cắt chuỗi hạt, t là số lợng các hạt cùng màu lớn nhất ở hai đầu).

Ví dụ:

chuoihat.INP chuoihat.OUT 4

8

7 8 7

Câu 3: (4 điểm) Kiến leo quanh ống trụ - TSP.PAS

Cho bảng chữ nhật m dòng n cột gồm m x n ô, mỗi ô chứa một

số nguyên dơng bé hơn 255 Ngời ta cuộn hình chữ nhật lại thành hình trụ sao cho mép trên và mép dới của hình chữ nhật trùng nhau (nói cách khác: dòng 1 và dòng m liền kề nhau) Một chú kiến bò từ một ô nào đó thuộc cột 1, muốn tới một ô thuộc cột n sao cho tổng các số trên đờng đi qua là lớn nhất và phải đi theo nguyên tắc: chỉ đợc sang cột kề bên phải cùng hàng hoặc chênh lệch 1 hàng.

Dữ liệu vào: lấy từ file văn bản ‘TSP.INP’

- Dòng đầu là 2 số m, n cách nhau một kí tự trắng (m, n

<=100).

- m dòng tiếp theo thể hiện bảng số hình chữ nhật (mỗi dòng n số cách nhau bởi kí tự trắng).

Kết quả: ghi ra file văn bản ‘TSP.OUT’

- Dòng đầu là tổng các số mà kiến đi qua

- n số thể hiện: số thứ i trong n số này là chỉ số dòng mà kiến đi qua cột i, các số cách nhau một kí tự trắng

Ví dụ:

Trang 3

5 5

1 9 5 8 5

1 2 5 7 5

1 2 3 8 5

1 2 3 8 9

1 2 9 4 5

35

2 1 5 4 4

HÕt

Trang 4

Hớng dẫn chấm thi chọn học sinh giỏi lớp 12

năm học 2007-2008

I/ Ph ơng pháp chung

- Giám khảo tạo các 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 mẫu để tính kết quả của dữ liệu vào: SAPXEP.PAS CHUOIHAT.PAS TSP.PAS

- Chơng trình học sinh chạy đúng mỗi bộ test, giám khảo cho 0.5 điểm Nh vậy, nếu câu hỏi có 3 điểm thì giám khảo phải tạo đợc 6 bộ test.

- Nếu chơng trình chạy sai test nào thì giám khảo cho 0

điểm đối với test đó

II/ Ch ơng trình mẫu

Câu 1 (3,0 điểm) Sắp xếp xâu - Sapxep.PAS

Program Sap_xep;

Type bb=Byte;ww=Word;ii=Integer; ll=Longint;

Const fi='Sapxep.inp';

fo='Sapxep.out';

Var n,cA,cB:ww;

st: string;

count:ww;

(*****************)

Procedure Read_Data;

Var f:Text;

Begin

Assign(f,fi);

Reset(f);

Read(f,st);

Close(f);

end;

(*****************)

Procedure Init;

Var i,t:ww;

Begin

count:=0;

cA:=0;

cB:=0;

For i:=1 to Length(st) do

if st[i]='A' then

inc(cA);

t:=0;

For i:=1 to Length(st) do

if st[i]='B' then

inc(t);

cB:=cA + t;

end;

(*****************)

Procedure Processing;

Var f:text;

Procedure HoanDoi(x,y:ww);

Var Tg:Char;

Begin

Trang 5

Tg:=st[x];

st[x]:=st[y];

st[y]:=Tg;

End;

(****************)

Function Find(ch:char;k,l:ww):ww;

Var i:ww;

Begin

Find:=0;

For i:= k to l do

if st[i] = ch then

begin

Find:=i;

Break;

end;

end;

Procedure Hoanvipq(ch1,ch2:char; x1,x2,y1,y2:ww); Var l,r:ww;

Begin

l:=1;

r:=1;

While (l<>0) and (r<>0) do

Begin

l:=Find(ch2,x1,x2);

r:=Find(ch1,y1,y2);

if (l<>0) and (r<>0) then

Begin

Hoandoi(l,r);

x1:=l;

y1:=r;

Writeln(f,l,' ',r);

inc(count);

end;

end;

end;

(****************)

Begin

Assign(f,'Tam.out');

Rewrite(f);

Hoanvipq('A','B',1,cA,cA+1,cB);

Hoanvipq('A','C',1,cA,cB+1,length(st));

Hoanvipq('B','C',cA+1,cB,cB+1,length(st)); Hoanvipq('A','B',1,cA,cA+1,length(st));

Hoanvipq('A','C',1,cA,cA+1,length(st));

Hoanvipq('B','C',cA+1,cB,cB+1,length(st)); close(f);

End;

(*****************)

Procedure Write_Data;

Var f,g:text; p,q:ww;

Begin

Assign(f,fo);

Rewrite(f);

Assign(g,'Tam.out');

Reset(g);

Writeln(f,count);

While not eof(g) do

Begin

Readln(g,p,q);

Writeln(f,p,' ',q);

end;

close(g);

erase(g);

close(f);

Trang 6

end;

(*****************)

Begin

Read_Data;

Init;

Processing;

Write_Data;

end

C©u 2: (3 ®iÓm) Chuçi h¹t - chuoihat.PAS

Program Chuoi_hat;

Const MaxN=10000;

fi='Chuoihat.inp';

fo='Chuoihat.out';

Type bb=Byte;ww=Word;ii=Integer; ll=Longint;

mmc=Array[1 MaxN] of bb;

Var A:mmc;

n,Luudem,Luucat:ww;

(*****************)

Procedure Read_Data;

Var f:Text;

k,i,j:ww;

Begin

fillchar(A,sizeof(A),0);

Assign(f,fi);

Reset(f);

i:=1;

Readln(f,A[i]);

j:= 5000-1;

While not eof(f) do

Begin

inc(j);

read(f,A[j]);

if not eoln(f) then

Begin

inc(i);

Read(f,A[i]);

end;

readln(f);

end;

For k:= j Downto 5000 do

Begin

inc(i);

A[i]:=A[k];

end;

n:=i;

Close(f);

end;

(*****************)

Procedure Processing;

Var i,j,Top,dau,truoc,sau:ww;

Begin

Luucat:=0;

Luudem:=0;

Top:=n;

dau:=0;

While A[Top]=A[1] do

Begin

dec(Top);

inc(dau);

end;

if top = 0 then

Begin

Trang 7

Luucat:=n+1;

Luudem:=n;

exit;

end;

i:=1;

While A[i] = A[1] do

Begin

inc(dau);

inc(i);

end;

sau:=dau;

While i<=Top do

Begin

truoc:=sau;

sau:=0;

j:=i;

While A[i]=A[j] do

Begin

inc(sau);

inc(i);

end;

if truoc+sau > Luudem then

Begin

Luudem:=truoc+sau;

Luucat:=j;

end;

end;

if sau + dau > Luudem then

Begin

Luudem:=sau+dau;

Luucat:=Top+1;

end;

end;

(*****************)

Procedure Write_Data;

Var f:Text;

Begin

Assign(f,fo);

ReWrite(f);

if Luucat > n then

Write(f,n,' ' ,1)

else

Write(f,Luucat-1,' ' ,Luucat);

Write(f,' ',Luudem);

Close(f);

end;

(*****************)

Begin

Read_Data;

Processing;

Write_Data;

end

C©u 3: (4 ®iÓm) KiÕn leo quanh èng trô - TSP.PAS

Program Kien_leo_quanh_ong_tru;

Const MaxN=101;

fi='TSP.inp';

fo='TSP.out';

Type bb=Byte;ww=Word;ii=Integer; ll=Longint;

mmc=Array[1 MaxN] of bb;

mhc=Array[0 MaxN,0 MaxN] of ll;

Var QH:mhc;

n,m:bb;

(*****************)

Trang 8

Procedure Read_Data;

Var f:Text;

i,j:bb;

Begin

Assign(f,fi);

Reset(f);

Readln(f,m,n);

for i:=1 to m do

For j:=1 to n do

Read(f,QH[i,j]);

Close(f);

end;

(*****************)

Procedure Init;

var i:bb;

Begin

FillChar(QH,sizeof(QH),0);

Read_Data;

For i:=1 to n do

Begin

QH[0,i]:=QH[m,i];

QH[m+1,i]:=QH[1,i];

end;

end;

(*****************)

Function Max(a,b,c:ll):ll;

Var mm:ll;

Begin

mm:=a;

if b>mm then mm:=b;

if c>mm then mm:=c;

Max:=mm;

end;

Procedure Processing;

Var i,j:bb;

Begin

For j:=1 to m do

For i:=1 to n do

QH[i,j]:=QH[i,j] + Max(QH[i-1,j-1],QH[i,j-1],QH[i+1,j-1]); end;

(*****************)

Procedure Write_Data;

Var f:Text;

i,Top,k,Row,col:bb;maxr:ll;

Vet:mmc;

Begin

Assign(f,fo);

ReWrite(f);

maxr:=0; Row:=0;

For i:=1 to m do

if QH[i,n] > maxr then

Begin

maxr:=QH[i,n];

Row:=i;

end;

Writeln(f,maxr);

FillChar(Vet,sizeof(Vet),0);

Top:=1;

Vet[Top]:=Row;

Col := n;

While Col > 1 do

Begin

k:=Row;

For i:=k-1 to k+1 do

Trang 9

if QH[i,Col-1]=Max(QH[Row-1,Col-1],QH[Row,Col-1],QH[Row+1,Col-1]) then

Begin

Row:=i;

if Row = 0 then Row := m;

if Row = m+1 then Row := 1;

end;

dec(Col);

inc(Top);

Vet[Top]:=Row;

end;

For i:=Top Downto 1 do

Write(f,Vet[i],' ');

Close(f);

end;

(*****************)

Begin

Init;

Processing;

Write_Data;

end

HÕt

Ngày đăng: 17/08/2017, 14:16

TỪ KHÓA LIÊN QUAN

w