Kỳ thi chọn học sinh giỏi cấp tỉnh lớp 9 THCS môn Tin học

doc 6 trang Người đăng tranhong Lượt xem 1531Lượt tải 1 Download
Bạn đang xem tài liệu "Kỳ thi chọn học sinh giỏi cấp tỉnh lớp 9 THCS môn Tin học", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Kỳ thi chọn học sinh giỏi cấp tỉnh lớp 9 THCS môn Tin học
	SỞ GIÁO DỤC ĐÀO TẠO	KỲ THI CHỌN HỌC SINH GIỎI CẤP TỈNH LỚP 9 THCS
	BÌNH ĐỊNH	KHÓA NGÀY: 18-3-2015
	ĐỀ CHÍNH THỨC	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
Tên tệp
dữ liệu vào
Tên tệp
dữ liệu ra
1
Liên phân số
LIENPS.PAS
Nhập từ
bàn phím
Xuất trên
màn hình
2
Số nguyên tố cùng nhau
NTCN.PAS
NTCN.INP
NTCN.OUT
3
Tìm đường hái quả
HAIQUA.PAS
HAIQUA.INP
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:
Liên phân số này ký hiệu là [q0,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 khoảng cách.
	Ví dụ:
Input
Output
a=7
b=5
1 2 2
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 cả 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
4
12
15
13
Bài 3: Tìm đường hái quả (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 quả. Trên mỗi ô thì số quả 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 cả các quả 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 phải 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 quả 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 khoảng cách (0<M,N<100).
- M dòng tiếp theo, mỗi dòng gồm N số tương ứng là số quả có thể hái được ở các ô theo thứ tự tại hàng thứ i. Mỗi số cách nhau một khoảng cách.
Dữ liệu ra là tệp HAIQUA.OUT cso cấu trúc như sau:
- Dòng đầu là số quả 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ố quả hái ở từng ô theo đường đi để được số quả nhiều nhất. Mỗi số cách nhau ít nhất một khoảng cách.
Ví dụ:
HAIQUA.INP
HAIQUA.OUT
4 5
1 3 5 7 2
7 9 4 2 2
2 3 1 6 7
7 4 6 2 5
41
1 7 9 4 2 6 7 5
Bài giải tham khảo:
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 y0 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 a1 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	Crt;
Type 	mmc=Array[1..100] of Word;
Const 	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 y0 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 m<a[i] then m:=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	Crt;
Const	fi='D:\Haiqua.Inp';
fo='D:\Haiqua.Out';
Type m2c=Array[1..100,1..100] of Word;
mmc=Array[1..100] of Word;
Var	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.
{ Lưu ý: 
1. Chưa Test đủ các trường hợp:	a[i+h,j] và a[i,j+k] (1<h<M-1;1<k<N-1);
1
3
5
7
2
7
9
4
2
2
2
3
9
6
7
7
4
6
2
5
	2. Trường hợp đầu bài chưa chặt chẽ: Giới hạn số quả tại mỗi A[i,j].
1
3
99
7
2
7
9
4
2
2
2
3
1
6
7
7
99
6
2
5

Tài liệu đính kèm:

  • docHSG_mon_tin_2015.doc