giải đề thi tin học trẻ tỉnh Bến Tre 2015 bảng C THPT

1. Đề thi tin học trẻ tỉnh Bến Tre 2015 bảng C THPT

Bài 1: Thám hiểm

(tên file: BAI1.PAS)

Một nhà thám hiểm leo núi mang theo một máy tính có thể liên lạc truyền tin qua hệ thống vệ tinh với một máy tính khác đặt ở trạm dưới chân núi, nơi ông khởi hành. Chẳng may, ông gặp tai nạn động đất và bị thương, phải trú tạm tại một trạm dừng chân trên núi. Máy tính ông mang theo cũng bị hỏng sau tai nạn, nó không thể nhận tin đến.

Nhà thám hiểm đã cố gắng truyền đi chuỗi tin S thông báo địa điểm của mình về trạm, mỗi lần liên lạc đều truyền cùng một thông điệp và lặp lại thông điệp đó nhiều lần, mỗi lần cách nhau một khoảng thời gian. Nhưng ông không biết rằng thông tin truyền đi luôn bị mất đi đúng m kí tự liên tiếp nhau trong mỗi lần chuyển tin, vị trí bị mất tin là ngẫu nhiên trong chuỗi tin. Thông điệp tại máy tính nhận bị đứt làm hai chuỗi tin s1, s2.

Nguồn pin của máy tính là có hạn, sau n lần gửi tin, ông đã mất liên lạc, do pin cạn kiệt.

Vấn đề ở trạm là phải phục hồi lại thông điệp đó, căn cứ vào các cặp chuỗi tin nhận được sau n lần nhận tin.

  • Yêu cầu: Với n, m do đội cứu hộ cung cấp, Em hãy viết một chương trình giúp đội cứu hộ phục hồi lại thông điệp nhận được.
  • Dữ liệu vào: cho trong file văn bản TH_HIEM.INP, hàng đầu tiên là số n, m (2<=n<=100; 1<=m<=100). 2n hàng tiếp theo, biểu diễn lần lượt từng cặp s1, s2 (khác rỗng, mỗi chuỗi dài không quá 200 kí tự).
  • Dữ liệu ra: Ghi vào file văn bản TH_HIEM.OUT, là giá trị chuỗi s đã phục hồi được. Nếu không thể phục hồi thì ghi chuỗi “KHONG-THE”.

Quy ước: kí tự trắng thay bằng dấu ‘-‘.

Ví dụ:

TH_HIEM.INP

2 6

JOIN-O-

2

J

TRAM-12

TH_HIEM.OUT

JOIN-O-TRAM-12

Bài 2: Biến đổi

(Tên file: BAI2.PAS);

Cho dãy A gồm 8 số nguyên có giá trị từ 1 đến 8. có 2 phép biến đổi trên dãy số này: Phép quay trái L và phép quay phải R.

Phép biến đổi L là dời các số trong dãy từ phải sang trái, số đầu tiên chuyển đến vị trí cuối dãy, ví dụ:

Dãy A: 1 2 3 4 5 6 7 8

Trạng thái dãy sau khi biến đổi L -> 2 3 4 5 6 7 8 1

Tương tự, phép biến đổi R dời các số trong dãy từ trái sang phải, số cuối dãy chuyển đến vị trí đầu dãy, ví dụ:

Dãy A: 1 2 3 4 5 6 7 8

Trạng thái của dãy sau khi biến đổi R -> 8 1 2 3 4 5 6 7

  • Yêu cầu:
  1. Cho một dãy các phép biến đổi, sau khi thực hiện tuần tự các biến đổi đã cho, dãy A có trạng thái mới, biến đổi thành dãy B. Hãy lập trình xác định dãy B.
  2. Tìm dãy các biến đổi, với số lần biến đổi là ít nhất để biến đổi A thành B. Nếu có nhiều đáp án thì chọn phương án đầu tiên tìm được.
  • Dữ liệu vào: cho trong file văn bản BDOILR.INP, chỉ gồm 1 hàng gồm các kí tự L,R viết liền nhau, dùng để biểu diễn dãy tuần tự các phép biến đổi cho trước. Chiều dài không quá 200 kí tự.
  • Dữ liệu ra: ghi vào file văn bản BDOILR.OUT, gồm 2 hàng.
  1. Hàng đầu tiên biểu diễn dãy B, các số viết liền nhau.
  2. Hàng thứ 2 ghi dãy các biến đổi ngắn nhất để biến đổi A thành B. Trường hợp không tìm có dãy biến đổi nào ngắn hơn thì ghi lại dãy biến đổi đã cho. Các kí tự viết liên tiếp nhau.

Ví dụ:

BDOILR.INP

RRRRRRR

BDOILR.OUT

23456781

L

2. Lời giải đề thi tin học trẻ tỉnh bến tre 2015

a. Gợi ý bài 1

– Xây dựng mảng A là kết quả bài toán, với 2 trường hợp như sau: A[i]=’ ‘ là kí tự i chưa được khôi phục, a[i]<>’ ‘ là kí tự i được khôi phục bởi kí tự A[i].

– với mỗi tin nhắn được gửi, sẽ có phần đầu là s1, phần bị mất gồm m kí tự, và phần cuối là s2, do tin nhắn được gửi là như nhau nên có thể nói độ dài xâu là như nhau.

– từ quy ước khoảng trắng ” ” là kí tự chưa được khôi phục, ta cộng xâu như sau S:=: s1 + m kí tự khoảng trắng ” “+ s2. lúc này chỉ việc kiểm tra a[j] đã khôi phục chưa, nếu chưa thì a[j]:=s[j] (với j=1..độ dài xâu tin nhắn).

– duyệt kiểm tra còn kí tự nào chưa khôi phục không, nếu có thì ghi ra “KHONG-THE” ngược lại ghi ra xâu A[1..độ dài xâu tin nhắn].

b. code tham khảo bài 1

const   fi='';
        fo='';
        nmax=600;
type    data=longint;
var
        f:text;
        A:array[0..nmax+1] of char;
        s,s1:ansistring;
        n,m,leg:data;
        kothe:boolean;

procedure xuli;
var     i,j:data;
begin
        for i:=1 to nmax do
                A[i]:=' ';
        assign(f,fi); reset(f);
        readln(f,n,m);
        for i:=1 to n do
                begin
                        readln(f,s);
                        for j:=1 to m do
                                s:=s+' ';
                        readln(f,s1);
                        s:=s+s1;
                        leg:=length(s);
                        for j:=1 to leg do
                                if a[j]=' ' then
                                        a[j]:=s[j];
                end;
        kothe:=false;
        for i:=1 to leg do
                if a[i]=' ' then
                        begin
                                kothe:=true;
                                break;
                        end;
        assign(f,fo); rewrite(f);
        if kothe then
                writeln(f,'KHONG-THE')
        else
                begin
                        for i:=1 to leg do
                                write(f,a[i]);
                end;
        close(f);
end;

begin
        xuli;
       // readln;
end.

 

4 thoughts on “giải đề thi tin học trẻ tỉnh Bến Tre 2015 bảng C THPT

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *