KỲ THI HỌC SINH GIỎI THCS

NĂM HỌC 2003 – 2004

MÔN: TIN HỌC

-          Đề thi.

-          Bộ test

-          Bài làm tham khảo.

 

 

ĐỀ HỌC SINH GIỎI MÔN TIN HỌC THCS – NĂM HỌC 2003-2004

KỲ THI NGÀY 20/2/2004

 

 

BÀI 1 : BÀI TOÁN DIỆN TÍCH TAM GIÁC

            Cho một h́nh chữ nhật ABCD, cạnh AB=a, cạnh BC=b. a,b là các số nguyên dương trong khoảng [1, 100]

            Một điểm M chạy trong đoạn BC  với BM=x . x là số nguyên duơng trong khoảng [0, b], một điểm N chạy trong đoạn CD với CN=x

           

            Tính giá trị lớn nhất và giá trị nhỏ nhất của diện tích tam giác AMN khi M, N lưu động.

 

Dữ liệu vào: Được cho trong tập tin CHUNHAT.inp, gồm một ḍng ghi hai số nguyên dương lần lượt là a, b. Hai số cách nhau một khoảng trắng

Dữ liệu ra : Yêu cầu xuất ra tập tin CHUNHAT.out, gồm bốn ḍng:

            + Ḍng đầu là giá trị lớn nhất của diện tích tam giác AMN (một chữ số thập phân)

            + Ḍng thứ hai là một giá trị của x để diện tích tam giác AMN đạt giá trị lớn nhất

            + Ḍng thứ ba là giá trị nhỏ nhất của diện tích tam giác AMN  (một chữ số thập phân)

            + Ḍng thứ tư là một giá trị của x để diện tích tam giác AMN đạt giá trị nhỏ nhất

Ví dụ:

CHUNHAT.inp

            10  6

CHUNHAT.out

 

             30.0

             0

            17.5

             5

 

Yêu cầu kỹ thuật :

+ Có kiểm tra dữ liệu nhập

+ Bài làm của thí sinh lưu trên tập tin Bailam1.pas


BÀI 2: BÀI TOÁN Ô VUÔNG

 

Cho một bảng chữ nhật gồm m x n điểm ( m hàng ngang, n hàng đứng) nằm trên các mắt lưới ô vuông. Các điểm liền kề trên cùng một hàng hoặc một cột có thể có nối với nhau bởi một đoạn thẳng có kích thước bằng 1.

Trên mỗi hàng có nhiều nhất n-1 đoạn thẳng nằm ngang nối các điểm liền nhau, trên mỗi cột có nhiều nhất là m-1 đoạn thẳng thẳng đứng nối các điểm liền nhau. Các đoạn liền kề nhau có thể sẽ tạo ra các ô vuông trên bảng (chỉ quan tâm các ô vuông có độ dài cạnh bằng 1). Xem h́nh dưới:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Với bảng trên ta có 4 hàng ngang (mỗi hàng 5 điểm) và 5 hàng đứng (mỗi hàng 4 điểm). Các đoạn thẳng nối chúng tạo nên 3 ô vuông.

Để mô tả bảng người ta dùng hai mảng nhị phân: một mảng diễn tả các đoạn thẳng nằm ngang, một mảng diễn tả các đoạn thẳng thẳng đứng.

Trong các mảng, số 1 diễn tả có đoạn thẳng nối hai điểm liên tiếp, số 0 diễn tả không có đoạn thẳng nối hai điểm.

Trong h́nh vẽ trên, (bảng có 4x5 điểm)  th́ ta có hai mảng sau:

                           Ngang                                                           Dọc

1

0

1

0

1

0

0

0

1

1

1

1

0

1

0

0

 

 

1

1

1

0

0

1

1

0

0

0

0

1

1

0

0

 

 
 

 

 

 

 

 


Nhiệm vụ :

Lập tŕnh đếm số các ô vuông có cạnh dộ dài bằng 1 tạo bởi các đoạn nối có trên bảng đă cho.

Dữ liệu vào: gồm ba tập tin

Kthuoc.inp: gồm 2 số nguyên dương (nhỏ hơn 100) lần lượt là m, n. Hai số cách nhau một khoảng trắng

Ngang.inpDoc.inp ( như mô tả ở phần trên). Hai số liền nhau cách nhau một khoảng trắng.

Dữ liệu ra : Xuất ra màn h́nh số ô vuông có trên bảng đă cho.

dụ :

Kthuoc.inp:

4 5

Ngang.inpDoc.inp chứa nội dung như hai bảng trên.

Xuất ra màn h́nh : 3

Lưu ư: Chỉ tính các ô vuông có độ dài cạnh bằng 1

Yêu cầu kỹ thuật :

+ Không cần kiểm tra dữ liệu nhập

+ Bài làm của thí sinh lưu trên tập tin Bailam2.pas

 

HẾT

 

MỘT SỐ BỘ TEST THAM KHẢO

Bài 1.

 

 

CHUNHAT.INP

CHUNHAT.OUT

Test 1

10

20

Sai dữ liệu

Test 2

40

40

800.0

 

 

 

0 (hay 40)

 

 

 

600.0

 

 

 

20

Test 3

10

6

30.0

 

 

 

0

 

 

 

17.5

 

 

 

5

Test 4

20

10

100.0

 

 

 

0

 

 

 

50.0

 

 

 

10

Test 5

20

6

60.0

 

 

 

0

 

 

 

18.0

 

 

 

6

 

Bài 2.

 

DOC.INP

KTHUOC.INP

NGANG.INP

XUAT

Test 1

 

 

 

1 1 1 1 1 1 1

1 1 0 0 0 1 1

1 1 0 0 1 1 1

1 1 1 1 1 1 1

5  7

1 1 1 1 1 1

1 1 0 0 1 1

1 1 0 0 1 1

1 1 0 0 1 1

1 1 1 1 1 1

13

Test 2

 

 

 

1 1 1 0 0

1 1 0 0 0

0 1 1 0 0

4  5

1 0 1 0

1 0 0 0

1 1 1 1

0 1 0 0

3

Test 3

 

 

 

0 0 1 0 0 0

0 0 1 0 0 0

0 0 1 0 0 0

0 0 1 0 0 0

0 0 1 0 0 0

6  6

0 0 0 0 0

0 0 0 0 0

1 1 1 1 1

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0

Test 4

 

 

 

1 0 1 1 0

1 0 1 0 1

0 1 1 0 1

1 1 0 1 1

5  5

1 1 0 1

0 0 1 1

1 1 1 1

1 0 1 0

1 1 1 1

1

 

 

 

THAM KHẢO MỘT SỐ BÀI LÀM HAY

 

BÀI 1.

program bailam1;

uses crt;

const finp='chunhat.inp';

      fout='chunhat.out';

var i,j,a,b,s,luu,luu1:longint;

    max,min,dt:real;

    f,g:text;

procedure nhap;

begin

   {$i-}

   assign(f,finp); reset(f);

   close(f);

   if (IOresult<>0) then

     begin

       write('File bi hu hoac khong ton tai');

       readln;

       halt;

     end;

   assign(f,finp); reset(f);

   readln(f,a,b);

   if (IOresult<>0) or (a<1) or (b<1) or (a<b) or (a>100) or (b>100) then

     begin

       write('Nhap sai');

       readln; halt;

     end;

   {$i+}

   close(f);

end;

begin

   clrscr;

   nhap;

   s:=a*b;

   max:=s/2; min:=max;

   for i:=0 to b do

     begin

        dt:=s-(a*i)/2-((b-i)*i)/2-((a-i)*b)/2;

        if dt<min then

          begin

            luu:=i; min:=dt;

          end;

        if dt>max then

          begin

            max:=dt; luu1:=i;

          end;

     end;

   assign(g,fout); rewrite(g);

   writeln(g,max:0:1);

   writeln(g,luu1);

   writeln(g,min:0:1);

   writeln(g,luu);

   close(g);

   writeln(max:0:1);

   writeln(luu1);

   writeln(min:0:1);

   writeln(luu);

   writeln('              Ngoai ra ket qua con duoc xuat vao file CHUNHAT.out');

   delay(300);

end.

 

 

BÀI 2.

program bailam2;

uses crt;

const fin1='kthuoc.inp';

      fin2='ngang.inp';

      fin3='doc.inp';

var f1,f2,f3:text;

    a,nga,doc:array[1..100,1..100] of integer;

    i,m,n,d,j:integer;

procedure nhap;

var i,j:integer;

begin

  assign(f1,fin1); reset(f1);

  read(f1,m,n);  close(f1);

  assign(f2,fin2); reset(f2);

  for i:=1 to m do

    begin

      for j:=1 to n-1 do

        read(f2,nga[i,j]);

      readln(f2);

    end;

  close(f2);

  assign(f3,fin3); reset(f3);

  for i:=1 to m-1 do

    begin

      for j:=1 to n do

        read(f3,doc[i,j]);

      readln(f3);

    end;

end;

begin

    clrscr;

    nhap;  d:=0;

    for i:=1 to m do

      for j:=1 to n do

        if nga[i,j]+nga[i+1,j]+doc[i,j]+doc[i,j+1]=4 then inc(d);

    write(d);

    readln;

end.