Thứ Sáu, 20 tháng 11, 2015

ĐỀ THI HSG CẤP TỈNH 2014-2015 VÀ ĐÁP ÁN NGÀY THỨ 2

SỞ GIÁO DỤC VÀ ĐÀO TẠO
KIÊN GIANG
-------------
KỲ THI CHỌN HỌC SINH GIỎI VÒNG TỈNH LỚP 12 THPT
NĂM HỌC 2014-2015
-----------------------
ĐỀ CHÍNH THỨC
(Đề thi gồm 02 trang)
MÔN: TIN HỌC
Thời gian làm bài: 180 phút (không kể thời gian giao đề)
Ngày thi thứ hai: 26/9/2014

TỔNG QUAN BÀI THI
Bài
Tên bài
File chương trình
File dữ liệu vào
File kết quả
Điểm
4
Mã hóa
MAHOA.PAS
MAHOA.INP
MAHOA.OUT
6
5
Biểu thức
BIEUTHUC.PAS
BIEUTHUC.INP
BIEUTHUC.OUT
7
6
Ngân hàng
NGANHANG.PAS
NGANHANG.INP
NGANHANG.OUT
7
Thí sinh lập trình giải các bài toán sau:
Bài 4: Mã hóa.
Để lưu trữ và xử lý các số hệ thập phân, máy tính có một bộ phận làm nhiệm vụ biến đổi dữ liệu từ hệ thập phân về hệ nhị phân.
Yêu cầu: Cho số thập phân n (-127 ≤ n ≤ 127). Hãy biến đổi số thập phân n thành dãy nhị phân tương ứng. Nếu n<0 thì bit thứ 8 (bit tận cùng bên trái) của dãy nhị phân là 1, ngược lại là 0.
Dữ liệu vào: Từ file văn bản MAHOA.INP gồm: một hoặc nhiều dòng, mỗi dòng là một số thập phân.
Dữ liệu ra: Đưa vào file văn bản MAHOA.OUT gồm: một hoặc nhiều dòng, mỗi dòng là một dãy nhị phân tương ứng.
Ví dụ:
MAHOA.INP
MAHOA.OUT
10
-7
00001010
10000111
Bài 5: Biểu thức.
Cho một biểu thức (((((1 ? 2) ? 3) ? 4) ? 5) ? 6)
Yêu cầu: Hãy tìm tất cả các phương án thay thế các dấu ‘?’ trong biểu thức bởi các phép toán +,-,*,/ sao cho biểu thức có giá trị bằng một số nguyên dương cho trước.
Dữ liệu vào: Từ file văn bản BIEUTHUC.INP gồm: một hoặc nhiều dòng, mỗi dòng là một số nguyên dương.
Dữ liệu ra: Đưa vào file văn bản BIEUTHUC.OUT gồm: một hoặc nhiều dòng, mỗi dòng là một phương án tìm được. Nếu không có phương án nào biểu diễn cho một số nguyên thì thông báo ‘Khong co phuong an bieu dien (((((1 ? 2) ? 3) ? 4) ? 5) ? 6)=số nguyên’
Ví dụ:
BIEUTHUC.INP
BIEUTHUC.OUT
10
90
77
(((((1-2)-3)/4)+5)+6) = 10
(((((1*2)+3)+4)-5)+6) = 10
(((((1*2)+3)*4)/5)+6) = 10
(((((1+2)+3)+4)+5)*6) = 90
(((((1*2)+3)*4)-5)*6) = 90
((((1*2)-3)+4)*5)*6) = 90
(((((1*2)*3)+4)+5)*6) = 90
Khong co phuong an bieu dien (((((1 ? 2) ? 3) ? 4) ? 5) ? 6) = 77
Bài 6: Ngân hàng.
Một ngân hàng A có n (n ≤ 100) loại tiền mệnh giá A[1], A[2], …, A[n] với số lượng tiền mỗi loại không giới hạn.
Yêu cầu: Hãy tìm một phương án chi số tiền m cho khách với số lượng tờ tiền là ít nhất.
Dữ liệu vào: Từ file văn bản NGANHANG.INP gồm 2 dòng:
- Dòng đầu: ghi hai số n và m.
- Dòng 2: ghi n số nguyên dương A[1], A[2], …,A[n].
Dữ liệu ra: Đưa vào file văn bản NGANHANG.OUT gồm 2 dòng
- Dòng đầu: Ghi số lượng tờ tiền phải trả.
- Dòng 2: ghi n số nguyên tương ứng với số tờ tiền cần phải trả cho mỗi loại tiền.
Ví dụ:
NGANHANG.INP
NGANHANG.OUT
5 97
1 5 10 50 100
8
2 1 4 1 0

---Hết---
Ghi chú:
·        Thí sinh không được sử dụng tài liệu.

·        Cán bộ coi thi không giải thích gì thêm.


ĐÁP ÁN:
BÀI 1:
program ma_hoa_nhi_phan;

    var m:integer;   f,g:text;
   procedure mahoa(n:integer);
      var  s:string;  b:boolean;
        Begin
            s:='';
            b:=false;
            if n<0 then begin n:=abs(n);  b:=true; end;
            while n>0 do
              begin
                if n mod 2 =1 then  s:='1'+s else s:='0'+s;
                n:=n div 2;
              end;
              while  (length(s)<7) do s:='0'+s;
              if b then s:='1'+s else s:='0'+s;
              writeln(g,s);
        End;
   BEGIN
       assign(f,'mahoa3.inp'); reset(f);
       assign(g,'mahoa3.out'); rewrite(g);
       while not(eof(f)) do
         begin
            readln(f,m); mahoa(m);
         end;
       close(f); close(g);
   END.
BÀI 2:
program bieuthuc;
  const a:array[1..4] of char =('+','-','*','/');
  var i,j,k,l,m,n:integer;
      f1,g:text;
      b:boolean;
  procedure xuat;
     begin
       writeln(g,'((((1',a[i],'2)',a[j],'3)',a[k],'4)',a[l],'5)',a[m],'6)= ',n);
     end;
  function  f( x,y:real;d:integer):real;
     begin
       case d of
          1: f:=(x+y);
          2: f:=(x-y);
          3: f:=(x*y);
          4: f:=(x/y);
       end;
     end;
   BEGIN
     assign(f1,'bieuthu3.inp'); reset(f1);
     assign(g,'bieuthu3.out'); rewrite(g);
     b:=false;
     while not(eof(f1)) do
       begin
        readln(f1,n);
        for i:=1 to 4 do
         for j:=1 to 4 do
           for k:=1 to 4 do
              for l:=1 to 4 do
                 for m:=1 to 4 do
                   if f(f(f(f(f(1,2,i),3,j),4,k),5,l),6,m)=n then begin xuat; b:=true;  end;
                   if not b then writeln(g,'Khong tim thay!');
        end;
     close(f1); close(g);
   END.
BÀI 3:
program nganhang;
     var n:byte;
     a:array[1..100] of byte;
     fx,l:array[0..10000] of word;
     m,i,j:integer;

     procedure nhap;
       var f:text;
       begin
         assign(f,'nganhan3.inp');
         reset(f);
         fillchar(a,sizeof(a),0);
         readln(f,n,m);
         for i:=1 to n do
            read(f,a[i]);
         close(f);
       end;
    procedure xuly;
       begin
          fillchar(fx,sizeof(fx),0);
          l:=fx;
          for i:=1 to m do
            begin
              for j:=1 to n do
                if a[j]<=i then
                  if (fx[i]=0) or (fx[i-a[j]]+1<fx[i]) then
                    begin
                      fx[i]:=fx[i-a[j]]+1;
                      l[i]:=j;
                    end;
            end;
       end;
    procedure xuat;
       var f:text;
           sl:array [1..100] of word;
       begin
           assign(f,'nganhan3.out');
           rewrite(f);
           fillchar(sl,sizeof(sl),0);
           repeat
              inc(sl[l[m]]);
              m:=m-a[l[m]];
           until fx[m]=0;
           writeln(f,fx[i]) ;
           for i:=1 to n do
              write(f,sl[i],' ');
              close(f);
       end;
       BEGIN
         nhap;
         xuly;
         xuat;
       END.

Không có nhận xét nào:

Đăng nhận xét