1. Trang chủ
  2. » Giáo Dục - Đào Tạo

ĐỀ THI CHỌN HỌC SINH GIỎI TIN 12 TIN HOC

4 125 4

Đ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 4
Dung lượng 39 KB

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

Nội dung

Bài 26: Các ký tự Đề thi HSG Tỉnh Tên chương trình: LETTERS.PAS Trò chơi được mô tả như sau: trên một bảng hình chữ nhật chia R hàng và C cột có các ký tự chữ hoa A-Z được viết trên mỗi

Trang 1

Bài 26: Các ký tự (Đề thi HSG Tỉnh) Tên chương trình: LETTERS.PAS

Trò chơi được mô tả như sau: trên một bảng hình chữ nhật chia R hàng và C cột có các ký tự chữ hoa (A-Z) được viết trên mỗi ô của bảng Trước khi bắt đầu trò chơi có một hình ở góc trên bên trái của bảng (hàng 1, cột 1) Trong mỗi bước di chuyển, một người chơi có thể di chuyển hình đến vị trí các ô liền kề ( lên trên, xuống dưới, sang trái, sang phải) với ràng buộc rằng hình không thể di chuyển đến vị trí kế tiếp nếu ô này chứa ký tự

đã xuất hiện mà hình đã di chuyển qua Mục đích của trò chơi là chơi để có nhiều bước di chuyển nhất có thể được

Viết chương trình xác định số vị trí tối đa trong bảng mà hình có thể viếng thăm trong trò chơi

Dữ liệu: Vào từ tập tin văn bản LETTERS.INP

- Dòng thứ nhất chứa hai số nguyên R và C, được viết cách nhau bởi một dấu

cách,

(1 ≤ R, C ≤ 20 )

- R dòng tiếp theo chứa, mỗi dòng chứa 1 xâu ký tự Mỗi dòng biểu diễn một hàng

của bảng

Kết quả : Ghi vào tập tin văn bản LETTERS.OUT một số nguyên là giá trị lớn nhất các vị trí mà hình có thể di chuyển trên bảng

Ví dụ:

2 4

CAAB

ADCB

3 6 HFDFFB AJHGDH DGAGEH

Chương trình cụ thể như sau:

var f1,f2:text;

m,n:integer;

a:array[1 10,1 10] of char;

b:array[1 10,1 10] of string[10];

c:array[1 100] of integer;

procedure doctep;

var i,j:integer;

begin

assign(f1,'c:\letters.inp');reset(f1);

assign(f2,'c:\letters.out');rewrite(f2);

readln(f1,m,n);

for i:=1 to m do

begin

for j:=1 to n do read(f1,a[i,j]);

readln(f1);

end;

end;

Procedure taomang;

var i,j:integer;

begin

Trang 2

Fillchar(B,sizeof(B),’’);

b[1,1]:=a[1,1];

for i:=2 to m do

if (b[i-1,1]<>'') and (pos(a[i,1],b[i-1,1])=0) then b[i,1]:=b[i-1,1]+a[i,1];

for i:=2 to n do

if (b[1,i-1]<>'') and (pos(a[1,i],b[1,i-1])=0) then b[1,i]:=b[1,i-1]+a[1,i];

for i:=2 to m do

for j:=2 to n do

begin

if(b[i,j-1]<>'') and (pos(a[i,j],b[i,j-1])=0) then

b[i,j]:=b[i,j-1]+a[i,j]

else

if (b[i-1,j]<>'') and (pos(a[i,j],b[i-1,j])=0) then

b[i,j]:=b[i-1,j]+a[i,j];

end;

WRITELN('MANG B LA');

FOR I:=1 TO M DO

BEGIN

FOR J:=1 TO N DO WRITE(B[I,J],' ');

WRITELN;

END;

end;

procedure xuli;

var i,j,d,max:integer;

begin

d:=0;

for i:=1 to m do

for j:=1 to n do

begin

d:=d+1;

c[d]:=length(b[i,j]);

end;

max:=1;

for i:=2 to m*n do

if c[i]>max then max:=c[i];

writeln(f2,max);

close(f1);close(f2);

end;

BEGIN

doctep;

taomang;

xuli;

READLN

END

Trang 3

Cách 2: Giải bằng đệ quy quay lui

Program LETTERS;

Const hx:array[1 4] of integer = (-1,0,1,0);

hy:array[1 4] of integer = (0,-1,0,1);

Nmax=20;

fi='LETTERS.INP';

fo='LETTERS.OUT';

Var A:array[1 Nmax,1 Nmax] of char;

kt:array[1 Nmax,1 Nmax] of boolean;

M,N,x,y,u,v,i,j:integer;

S,ketqua:string;

f:text;

Procedure doctep;

Begin

Assign(f,fi);reset(f);

Readln(f,M,N);

for i:=1 to m do

begin

for j:=1 to n do read(f,A[i,j]);

readln(f);

end;

close(f);

End;

Procedure khoitao;

Begin

fillchar(kt,sizeof(kt),true);

x:=1;y:=1;kt[x,y]:=false;

s:=a[1,1];ketqua:='';

End;

Procedure try(m:integer);

var r:byte;

Begin

if length(s)>length(ketqua) then ketqua:=s;

For r:=1 to 4 do

begin

u:=x+hx[r];

v:=y+hy[r];

if (u>=1) and (u<=m) and (v>=1) and (v<=n) then

if (Pos(A[u,v],S)=0) and (kt[u,v]) then

begin

x:=u;

y:=v;

kt[u,v]:=false;

S:=S+A[u,v];

try(m+1);

kt[u,v]:=true;

x:=x-hx[r];

Trang 4

y:=y-hy[r];

delete(s,length(s),1); end;

end;

End;

BEGIN

doctep;

khoitao;

try(1);

Assign(f,fo);rewrite(f); write(f,ketqua);

close(f);

END

Ngày đăng: 26/08/2017, 20:35

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w