Tải bản đầy đủ (.doc) (6 trang)

De thi HSG mon tin hoc tinh binh dinh 20142015

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (56.62 KB, 6 trang )

SỞ GIÁO DỤC ĐÀO TẠO
BÌNH ĐỊNH

ĐỀ CHÍNH THỨC

KỲ THI CHỌN HỌC SINH GIỎI CẤP TỈNH LỚP 9 THCS
KHÓA NGÀY: 18-3-2015

Môn thi: TIN HỌC
Thời gian: 150 phút (không kể thời gian phát đề)
Ngày thi: 18/3/2015

Tổng quan bài thi:
Bài

Tên bài

Tên tệp
chương trình

1

Liên phân sô

LIENPS.PAS

2
3

Sô nguyên tô cùng nhau
Tìm đường hái qua



NTCN.PAS
HAIQUA.PAS

Tên tệp
dữ liệu vào
Nhập tư
bàn phím
NTCN.INP
HAIQUA.INP

Tên tệp
dữ liệu ra
Xuất trên
màn hình
NTCN.OUT
HAIQUA.OUT

Bài 1: Liên phân sô (7,0 điểm):
Sô hữu tỉ dương a/b luôn được biểu diễn dưới dạng một liên phân sô hữu hạn:
a
= q0 +
b

1
q1 +

1
q2 +


1
... +

1
qn

Liên phân sô này ký hiệu là [q 0,q1,q2,...,qn], trong đó q0≥ 0; q1,q2,...,qn là những sô nguyên
dương; qn>1; n gọi là độ dài của liên phân sô.
Hãy viết chương trình biến đổi một phân sô a/b thành liên phân sô hữu hạn.
Dữ liệu vào là hai sô nguyên dương a, b nhập tư bàn phím để biểu diễn phân sô a/b.
Dữ liệu ra là một dòng gồm các sô q0,q1,q2,...,qn biểu diễn dạng liên phân sô của phân sô a/b. Các sô
viết cách nhau ít nhất một khoang cách.
Ví dụ:
Input
Output
a=7
122
b=5
Bài 2: Sô nguyên tô cùng nhau: (7,0 điểm):
Hai sô nguyên dương được gọi là nguyên tô cùng nhau nếu ước sô chung lớn nhất của chúng
bằng 1.
Cho N sô nguyên dương A1,A2,...,AN. Gọi M là giá trị lớn nhất trong các sô A1,A2,...,AN.
Viết chương trình tìm sô nguyên dương X lớn nhất không vượt quá M mà X nguyên tô cùng
nhau với tất ca các sô A1,A2,...,AN.
Dữ liệu vào là tệp NTCN.Inp có cấu trúc như sau:
- Dòng đầu là sô nguyên dương N (N≤ 100).
- N dòng tiếp theo, mỗi dòng chứa một giá trị tương ứng A1,A2,...,AN (Ai≤ 1000;i=1,2,...,N).
Dữ liệu ra là tệp NTCN.Out chứa sô nguyên X tìm được thỏa mãn điều kiện của bài toán.
Ví dụ:
NTCN.Inp

NTCN.Out
3
13
4
12
15


Bài 3: Tìm đường hái qua (6,0 điểm):
Một khu vườn hình chữ nhật kích thước MxN được chia thành các ô vuông đơn vị để trồng
một loại cây ăn qua. Trên mỗi ô thì sô qua tương ứng có thể hái được là A[i,j] (1≤ i≤ M;
1≤ j≤ N).
Một người khách dạo qua vườn và hái tất ca các qua trên những ô đi qua. Vị trí xuất phát tư ô
[1,1] và kết thúc tại ô [M,N] với hành trình là sang ô chung cạnh theo hướng tăng của i hoặc j
(sang phai hoặc đi xuông – như hình vẽ). Hãy viết chương trình tìm lộ trình đi của người đó để
hái được nhiều qua nhất.
1

3

5

7

2

7

9


4

2

2

2

3

1

6

7

7

4

6

2

5

Dữ liệu vào là tệp HAIQUA.INP có cấu trúc như sau:
- Dòng đầu tiên là hai sô M, N nguyên dương cách nhau một khoang cách (0- M dòng tiếp theo, mỗi dòng gồm N sô tương ứng là sô qua có thể hái được ở các ô theo thứ tư
tại hàng thứ i. Mỗi sô cách nhau một khoang cách.

Dữ liệu ra là tệp HAIQUA.OUT cso cấu trúc như sau:
- Dòng đầu là sô qua lớn nhất có thể hái được theo một lộ trình thỏa mãn yêu cầu.
- Dòng tiếp theo gồm M+N-1 sô tương ứng là sô qua hái ở tưng ô theo đường đi để được sô qua
nhiều nhất. Mỗi sô cách nhau ít nhất một khoang cách.
Ví dụ:
HAIQUA.INP
HAIQUA.OUT
45
41
13572
17942675
79422
23167
74625


Bài giai tham khao:
Câu 1: LienPS.Pas:
Uses Crt;
Var q:Array[1..100] of Word;
a,b,i,k:Word;
Function Uc(x,y:Word):Word;
Var r:Word;
Begin
While y<>0 do
Begin
r:=x mod y;
x:=y;
y:=r;
End;

Uc:=x;
End;
Procedure Psrg;
Var m:Word;
Begin
m:=Uc(a,b);
a:=a div m;
b:=b div m;
End;
Procedure Xuli;
Begin
k:=0;
Repeat
If a>b then
Begin
q[k]:= a div b;
a:= a mod b;
End
Else
Begin
q[k]:= b div a;
b:= b mod a;
End;
inc(k);
Until (a=1) or (b=1);
If a<>1 then q[k]:=a
Else q[k]:=b;
For i:=0 to k do
Write(q[i],' ');
End;

Begin
Clrscr;
Repeat


Write('Nhap a: '); Readln(a);
Write('Nhap b: '); Readln(b);
Until (a>0) and (b>0);
Psrg;
If a<=b then Write(0,' ',b)
Else Xuli;
Readln
End.
Câu 2: NTCN.Pas:
Uses
Type
Const

Crt;
mmc=Array[1..100] of Word;
fi='D:\Ntcn.Inp';
fo='D:\Ntcn.Out';
Var
i,n,m:Byte;
a:mmc;
f,g:Text;
Function Uc(x,y:Word):Boolean;
Var r:Word;
Begin
While y<>0 do

Begin
r:=x mod y;
x:=y;
y:=r;
End;
If x=1 then Uc:=True
Else Uc:=False;
End;
Function mUc(c:mmc;k:Byte;m:Word):Boolean;
Var i:Byte;
kt:Boolean;
Begin
Kt:=True;
For i:=1 to k do
Kt:=(Uc(m,c[i]) and Kt);
mUc:=Kt;
End;
Function Max(c:mmc;k:Byte):Word;
Var
i:Byte;
m:Word;
Begin
m:=a[1];
For i:=2 to k do
If mm:=a[i];
Max:=m;


End;

Begin
Assign(f,fi);
Reset(f);
Readln(f,n);
For i:=1 to n do
Readln(f,a[i]);
Close(f);
m:=Max(a,n)-1;
Assign(g,fo);
Rewrite(g);
Repeat
If mUc(a,n,m) then
Begin
Write(g,m);
Close(g);
Exit;
End
Else dec(m);
Until m=0;
End.
Câu 3: Haiqua.Pas:
Uses
Const

Var

Crt;
fi='D:\Haiqua.Inp';
fo='D:\Haiqua.Out';
Type m2c=Array[1..100,1..100] of Word;

mmc=Array[1..100] of Word;
i,j,k,m,n,max:Byte;
a:m2c;
b:mmc;
f,g:Text;

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);
max:=a[1,1];
k:=1;
i:=1; j:=1;
fillchar(b,sizeof(b),0);
b[1]:=max;


While (i<=m) and (j<=n) do
Begin
inc(k);
If a[i+1,j]>a[i,j+1] then
Begin
inc(i);

max:=max+a[i,j];
b[k]:=a[i,j];
End
Else
Begin
If a[i+2,j]>a[i,j+2] then
Begin
inc(i);
max:=max+a[i,j];
b[k]:=a[i,j];
End
Else
inc(j);
max:=max+a[i,j];
b[k]:=a[i,j];
End;
End;
Dec(k);
Assign(g,fo);
Rewrite(g);
Writeln(g,max);
For i:=1 to k do
Write(g,b[i],' ');
Close(g);
End.



×