Tải bản đầy đủ (.pdf) (85 trang)

tuyển chọn đề thi học sinh giỏi môn tin học lớp 9 có đáp án và thang điểm

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 (7.43 MB, 85 trang )

TUYỂN CHỌN
ĐỀ THI HỌC SINH GIỎI

MÔN TIN HỌC
LỚP 9
(có đáp án và thang điểm)

Tp. Hồ Chí Minh, ngày 1/8/2016


SỞ GIÁO DỤC VÀ ĐÀO TẠO KỲ THI CHỌN HỌC SINH GIỎI LỚP 9 CẤP TỈNH
LONG AN
MÔN: TIN HỌC
NGÀY THI: 11/4/2012
THỜI GIAN: 150 PHÚT (Không kể thời gian phát đề)
ĐỀ THI CHÍNH THỨC
Lưu ý: Thí sinh tạo thư mục là SBD của mình, làm bài và lưu với tên tập tin là
bai1.pas, bai2.pas, bai3.pas vào thư mục SBD vừa tạo.
Câu 1: (7 điểm) Số nguyên dương n gọi là song tố khi n là số nguyên tố và tổng
chữ số của nó cũng là số nguyên tố.
Yêu cầu: Viết chưong trình thực hiện công việc sau:
a) Nhập vào số nguyên n. Hãy cho biết n có là số song tố hay không?
b) In ra các số song tố bé hơn hoặc bằng n.
c) In ra các cặp số nguyên tố lẻ liên tiếp nhỏ hơn hoặc bằng n.
Ví dụ:
Nhập
Câu a
Câu b
Câu c
n=11 So n la so song to
2 3 5 7 11


(3,5); (5,7)
Câu 2: (7.0 điểm) Cho một chuỗi gồm n2 ký tự. Người ta cắt chuỗi từ trái sang phải
thành n chuỗi con, mỗi chuỗi con có đúng n ký tự. Viết mỗi chuỗi con thành một
cột, ta có một bảng gồm n hàng và n cột ký tự.
Yêu cầu: Viết chương trình nhập vào một chuỗi gồm n2 ký tự (4  n2  255).
a) In ra màn hình các hàng có tổng mã ASCII của các ký tự là lớn nhất.
b) In giá trị tổng ở câu a ra màn hình.
Ví dụ:
Nhập chuỗi Bảng
Kết quả
abcdefghi
adg
a) c f i
beh
b) 306
cf i
Câu 3: (6.0 điểm) Khi đào hầm Thủ Thiêm người ta dùng một Robot để đào, ban
đầu người ta đào đường hầm 1 đơn vị độ dài sau đó đặt Robot xuống. Robot này
được điều khiển bởi 2 lệnh là: C1 và N2.
- Lệnh C1 là đào thêm 1 đơn vị độ dài thì tốn 2 đơn vị năng lượng.
- Lệnh N2 là đào thêm một đoạn đường hầm bằng độ dài đang có thì tốn 4
đơn vị năng lượng.
Hãy viết chương trình ra lệnh cho Robot đào một đường hầm có độ dài k
đơn vị độ dài với các lệnh là ít nhất và sự tiêu tốn năng lượng là thấp nhất. Biết
ban đầu đường hầm dài 1 đơn vị độ dài.
Yêu cầu:
- Dữ liệu vào trong tập tin Robot.inp gồm một số k là độ dài đường hầm
cần đào.
- Dữ liệu ra trong tập tin Robot.out gồm hai dòng:
+ Dòng đầu là số năng lượng ít nhất đã tiêu tốn cho Robot đào hầm.



+ Dòng tiếp theo chứa các lệnh C1 hoặc N2, mỗi lệnh cách nhau 1 khoảng
trắng.
Ví dụ:
Robot.inp
10

Robot.out
12
C1 N2 C1
N2

(Giám thị coi thi không giải thích gì thêm)
--- Hết---

SỞ GIÁO DỤC VÀ ĐÀO TẠO KỲ THI CHỌN HỌC SINH GIỎI LỚP 9 CẤP TỈNH
LONG AN
MÔN: TIN HỌC
NGÀY THI: 11/4/2012
THỜI GIAN: 150 PHÚT (Không kể thời gian phát đề)
ĐỀ THI CHÍNH THỨC
HƯỚNG DẪN CHẤM
Bài 1 : (7 điểm)
Nhập

Câu a
So n la so song to
So n khong la so song
to

So n la so song to
So n khong la so song
to

n=7
n=20
n=23
n=31

Kết quả
Câu b
2357
2 3 5 7 11
2 3 5 7 11 23
2 3 5 7 11 23 29

Điểm

Câu c
(3,5); (5,7)
(3,5); (5,7); (11,13); (17,19)

2.0

(3,5); (5,7); (11,13); (17,19)
(3,5); (5,7); (11,13);
(17,19); (29,31)

1.5


Bài 2: (7.0 điểm)
Test
1

2
3

Nhập chuỗi

Kết quả
a) O H L I T
HOCSINHGIOILOPCHINCAPTINH
b) 384
a) A E I J
DHLA
ABCDEFGHIJKLJAAA
b) 281
a) s h z b
asdfghjklzxcvb q m
djxq

Điểm
1.0
1.0
0.5
1.0
1.0
0.5
1.0


2.0

1.5


b) 439

1.0

Bài 3: (6.0 điểm)
Test

Robot.inp

1

12

2

155

3

1053

Robot.out
12
C1 C1 N2 N2
43

C1 N2 N2 C1 N2 C1 N2 N2 C1 N2 C1
46
C1 N2 N2 N2 N2 N2 C1 N2 C1 N2 C1 N2 N2 C1
---Hết---

Điểm
1.0
1.0
1.0
1.0
1.0
1.0


SỞ GIÁO DỤC & ĐÀO TẠO
LÂM ĐỒNG

KÌ THI CHỌN HỌC SINH GIỎI CẤP TỈNH
NĂM HỌC 2010 - 2011

ĐỀ THI CHÍNH THỨC
(Đề thi có 02 trang, gồm 3 bài)

Môn : TIN HỌC - THCS
Thời gian : 150 phút (không kể thời gian giao đề)
Ngày thi : 18/2/2011

Cấu trúc đề thi:
STT
Tên bài

1
PHẦN TỬ YÊN
NGỰA
2
TỔNG CÁC SỐ
FIBONACI
3
CHỌN PHẦN
THƯỞNG

Tên file bài làm
PTYN.PAS

Tên file INPUT
PTYN.INP

Tên file OUTPUT
PTYN.OUT

FIBO.PAS

FIBO.INP

FIBO.OUT

PTHUONG.PAS

PTHUONG.INP

PTHUONG.OUT


Bài 1: (6 điểm) PHẦN TỬ YÊN NGỰA
Cho mảng 2 chiều A có kích thước MxN số nguyên. Phần tử A[i,j] được gọi là
phần tử yên ngựa nếu nó là phần tử nhỏ nhất trong hàng i đồng thời là phần tử lớn nhất
trong cột j.
Em hãy lập chương trình tìm phần tử yên ngựa của mảng A.
Dữ liệu vào: cho file PTYN.INP gồm:
- Dòng đầu tiên gồm 2 số M, N (0 ≤ M,N ≤100)
- M dòng tiếp theo, mỗi dòng gồm có N số nguyên của mảng A
(các giá trị cách nhau ít nhất 1 khoảng cách).
Dữ liệu ra: ghi ra file PTYN.OUT vị trí của các phần tử yên ngựa (nếu có) hoặc dòng
thông báo “Không có phần tử yên ngựa”.
Ví dụ:
PTYN.INP
PTYN.OUT
33
(2,2)
15
3
9
55
4
6
76
1
2
Hoặc :
PTYN.INP
PTYN.OUT
33

Khong co phan tu yen ngua
15
10
5
55
4
6
76
1
2


Bài 2: (7 điểm) TỔNG CÁC SỐ FIBONACI
Dãy Fibonaci là dãy gồm các số: 1, 1, 2, 3, 5, 8, .... được xác định bởi công thức
sau:
F1=1, F2=1, Fi=Fi-1+Fi-2 với i>2.
Em hãy biểu diễn một số tự nhiên N thành tổng của ít nhất các số Fibonaci khác
nhau.
Dữ liệu vào: cho file FIBO.INP chứa số N (N ≤ 2000000000)
Dữ liệu ra: ghi ra file FIBO.OUT biểu diễn số N thành tổng của ít nhất các số
Fibonaci khác nhau.

Ví dụ:
FIBO.INP
129

FIBO.OUT
129 = 89 + 34 + 5 + 1

Hoặc

FIBO.INP
8

FIBO.OUT
8=8

Bài 3: (7 điểm) CHỌN PHẦN THƯỞNG
Trong kỳ thi học sinh giỏi môn Tin học, em là người đạt giải đặc biệt. Ban tổ chức
cho phép em chọn các phần thưởng cho mình. Các phần thưởng xếp thành một dãy
được đánh số từ 1 đến N (0 ≤ N ≤ 10000), phần thưởng thứ i có giá trị là ai (1 ≤ ai ≤
100). Em được phép chọn các phần thưởng cho mình theo nguyên tắc không chọn 3
phần thưởng liên tiếp nhau trong dãy.
Viết chương trình để máy tính hướng dẫn em chọn các phần thưởng sao cho tổng
giá trị của các phần thưởng nhận được là lớn nhất.
Dữ liệu vào: cho file PTHUONG.INP gồm các dòng:
- Dòng đầu tiên là số phần thưởng N
- N dòng tiếp theo lần lượt là giá trị của các phần thưởng.
Dữ liệu ra: ghi ra file PTHUONG.OUT gồm các dòng:
- Dòng đầu tiên ghi tổng giá trị lớn nhất của các phần thưởng đã chọn
- Dòng tiếp theo ghi vị trí của các phần thưởng đã chọn theo thứ tự tăng dần.
Ví dụ:
PTHUONG.INP
5
6
9
1

PTHUONG.OUT
23
1245



3
5
Hoặc
PTHUONG.INP
7
6
9
1
3
5
10
4

PTHUONG.OUT
32
12467

----------HẾT----------

Họ và tên thí sinh: ....................................................... Số báo danh: ..................................
Giám thị 1:................................................................... Ký tên: ...........................................
Giám thị 2:................................................................... Ký tên: ...........................................


SỞ GIÁO DỤC & ĐÀO TẠO

KÌ THI CHỌN HỌC SINH GIỎI CẤP TỈNH


NĂM HỌC 2010 – 2011

LÂM ĐỒNG

HƯỚNG DẪN CHẤM ĐỀ CHÍNH THỨC
Môn :

TIN HỌC - THCS

Ngày thi : 18/2/2011
Bài 1: (6 điểm)
Có 6 bộ TEST, chạy đúng mỗi bộ cho 1 điểm.
STT
TEST.INP
1
3 3
15 3 9
55 4 6
76 1 2
2
3 4
15 10 8 8
55 4 6 2
76 9 12 7
3
3 4
15 10 8 8
55 4 6 2
76 9 12 8
4

45
11111
11111
11111
11111
5
TEST5INP (dữ liệu trên đĩa hướng
dẫn chấm)
6
TEST6INP (dữ liệu trên đĩa hướng
dẫn chấm)
Bài 2: (7 điểm)
Có 7 bộ TEST, chạy đúng mỗi bộ cho 1 điểm.
STT
TEST.INP
1
10
2
89
3
129
4
1000
5
11594
6
14930352

TEST.OUT
(2,2);


(1,4);

(1,4); (3,4)

(1,1); (1,2); (1,3); (1,4); (1,5); (2,1);
(2,2); (2,3); (2,4); (2,5); (3,1); (3,2);
(3,3); (3,4); (3,5); (4,1); (4,2); (4,3);
(4,4); (4,5);
Khong co phan tu yen ngua
(6,1)

TEST.OUT
10 = 8 + 2
89 = 89
129 = 89 + 34 + 5 + 1
1000 = 987 + 13
11594 = 10946 + 610 + 34 + 3 + 1
14930352 = 14930352


7

246854244

246854244 = 165580141 + 63245986
+ 14930352 + 2178309 + 832040 +
75025 + 10946 + 987 + 377 + 55 + 21
+5


Bài 3: (7 điểm)
Có 7 bộ TEST, chạy đúng mỗi bộ cho 1 điểm.
STT
1

2

3

4

5

6

TEST.INP
5
6
9
1
3
5
7
6
9
1
3
5
10
4

5
2
2
2
2
2
100
1
2
3
4
…..
99
100
3
1
2
3
5
1
0

TEST.OUT
23
1245

32
12467

8

1245

3400
1 3 4 6 7 9 10 12 13 15
16 18 19 21 22 24 25 27 28 30
31 33 34 36 37 39 40 42 43 45
46 48 49 51 52 54 55 57 58 60
61 63 64 66 67 69 70 72 73 75
76 78 79 81 82 84 85 87 88 90
91 93 94 96 97 99 100
5
23

8
135


7

3
0
4
10
1
6
3
20
4
23
4

57
87
100

241
1 2 4 6 7 9 10

-----HẾT-----



SỞ GIÁO DỤC VÀ ĐÀ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-2016

Môn thi:
Thời gian:
Ngày thi:

Tổng quan đề thi:

TIN HỌC
150 phút (không kể thời gian phát đề)
18/3/2016

(Đề thi có 02 trang)


Bài

Tên bài

1
2
3

Cặp số thân thiết (6,0 điểm)
Dãy có giá trị lớn nhất (7,0 điểm)
Đường đi tốt nhất (7,0 điểm)

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

SO_TT.PAS

Bàn phím

Màn hình

DAYCON.PAS


DAYCON.INP

DAYCON.OUT

DUONGDI.PAS

DUONGDI.INP

DUONGDI.OUT

Bài 1: Cặp số thân thiết (6,0 điểm):
Hai số nguyên dương được gọi là thân thiết nếu chúng có cùng ước số nguyên tố lớn nhất.
Hãy viết chương trình kiểm tra xem hai số nguyên dương có là cặp số thân thiết hay không?
Dữ liệu vào là hai số nguyên dương a, b (1< a, b <1010) nhập từ bàn phím.
Dữ liệu ra gồm:
- Ước nguyên tố lớn nhất của từng số;
- Kết luận: “La cap so than thiet” hoặc “Khong than thiet”.
Ví dụ:
Input
Output
Nhap hai so: 18 2016
UNTLN tuong ung: 3, 7
Khong than thiet
Input
Nhap hai so: 50 15

Output
UNTLN tuong ung: 5, 5
La cap so than thiet


Bài 2: Dãy có giá trị lớn nhất (7,0 điểm):
Cho một xâu S có chiều dài N (1≤N≤100) chỉ gồm các chữ số từ 1 đến 9 và một số nguyên
dương k (k≤N). Hãy viết chương trình xóa bớt các ký tự trong xâu S để còn lại một xâu gồm
k chữ số biểu thị số lớn nhất có k chữ số thu được theo cách này?
Dữ liệu vào là tệp DAYCON.INP có cấu trúc gồm hai dòng:
- Dòng thứ nhất chứa xâu S;
- Dòng thứ hai chứa số tự nhiên k.
Dữ liệu ra là tệp DAYCON.OUT là xâu có chiều dài k cần tìm.
Ví dụ:
DAYCON.INP
DAYCON.OUT
135792468
968
3
Bài 3: Đường đi tốt nhất (7,0 điểm):
Sân chơi là một mặt phẳng chia ra thành N hàng đánh số từ 1 đến N (1i (1≤ i ≤ N) có i ô điểm có giá trị cho trước là những số nguyên dương (không vượt quá
1000). Trò chơi là chọn một lộ trình với ô xuất phát là ô ở hàng thứ nhất, lần lượt đi qua một


trong 2 ô lân cận ở hàng tiếp theo (theo hướng mũi tên) cho đến khi đến được một ô ở hàng
cuối cùng và thu nhặt các điểm số có ở các ô trên đường đi qua (lộ trình sẽ thăm đúng N ô)
(Hình vẽ dưới minh họa cho một ví dụ với N=4).
Cho trước một bảng biểu thị giá trị điểm số các ô trên từng hàng. Hãy lập trình tìm một lộ
trình hợp quy định của luật chơi và thu được điểm số cao nhất.
Dữ liệu vào là tệp DUONGDI.INP có cấu trúc như sau:
- Dòng thứ nhất chứa số tự nhiên N;
- N dòng tiếp theo sẽ chứa các giá trị điểm số trên các ô điểm ở dòng tương ứng. Dòng
thứ i sẽ có i giá trị. Các giá trị cách nhau một khoảng trắng.
Dữ liệu ra là tệp DUONGDI.OUT gồm 2 dòng:

- Dòng thứ nhất chứa giá trị tổng điểm lớn nhất thu được theo lộ trình tối ưu;
- Dòng thứ 2 chứa N số nguyên là giá trị các ô điểm mà lộ trình tối ưu đi qua.
8
5
2
3

1
6

4

9
2

3

Ví dụ:
DUONGDI.INP
4
8
51
269
3423

DUONGDI.OUT
23
8564

Chú ý: Nếu chỉ nêu được số điểm lớn nhất mà không chỉ được lộ trình đi thì được ½

số điểm của bài.
_______________________________


Bài 1: Cặp số thân thiết:
Program So_TT;
Uses Crt;
Var a,b:Longint;
Procedure Nhap;
Begin
Clrscr;
Write('Nhap hai so: ');
Readln(a,b);
End;
Function Kt(n:Longint):Boolean;
Var i:Longint;
d:Shortint;
Begin
d:=0;
Kt:=True;
For i:=2 to Round(Sqrt(n)) do
Begin
If (n mod i)=0 then d:=d+1;
If d>0 then
Begin
Kt:=False;
Break;
End;
End;
End;

Procedure Xuli;
Var aa,bb,i,j:Longint;
Begin
aa:=0;
bb:=0;
For i:=a downto 2 do
If (a mod i =0) and (Kt(i)) then
Begin
aa:=i;
Break;
End;
For j:=b downto 2 do
If ((b mod j = 0) and Kt(j)) then
Begin
bb:=j;
Break;
End;
Writeln('UNTLN tuong ung: ',aa,', ',bb);
If aa=bb then


Writeln('La cap so than thiet')
Else
Writeln('Khong than thiet');
Readln
End;
Begin
Nhap;
Xuli;
End.


Bài 2: Dãy có giá trị lớn nhất:
Program Daymax;
Type
Strings=String[100];
Const
A:Array['1'..'9'] of Byte = (1,2,3,4,5,6,7,8,9);
B:Array[1..9] of String = ('1','2','3','4','5','6','7','8','9');
fi='D:\Daycon.Inp';
fo='D:\Daycon.Out';
Var
S:Strings;
k:Byte;
f:Text;
Procedure Nhap;
Begin
Assign(f,fi);
Reset(f);
Readln(f,s);
Read(f,k);
Close(f);
End;
Function Vitri(S:Strings):Strings;
Var i,n,max:Byte;
Begin
n:=Length(s);
max:=1;
For i:=2 to n-k+1 do
If a[s[max]] < a[s[i]] then
max:=i;

Vitri:=Copy(s,max,n-max+1);
End;


Procedure Xuli;
Var cs,vt,n:Byte;
Begin
Assign(f,fo);
Rewrite(f);
n:=Length(s);
If n=k then Write(f,s)
Else
Begin
s:=Vitri(s);
cs:=1;
Repeat
vt:=pos(b[cs],s);
While (vt<>0) and (n>k) do
Begin
Delete(s,vt,1);
vt:=pos(b[cs],s);
n:=Length(s);
End;
inc(cs);
Until n=k;
Writeln(f,s);
End;
Close(f);
End;
Begin

Nhap;
Xuli;
End.

Bài 3: Đường đi tốt nhất:
Program DuongDi;
Const
maxN =100;
fi='D:\Duongdi.Inp';
fo='D:\Duongdi.Out';
Var
n:Word;
A :Array[1..maxN,1..maxN] of Word;
F :Array[0..maxN,0..maxN] of Word;
g:Text;
Procedure Nhap;
Var i,j :Word;
Begin
Assign(g,fi);
Reset(g);


Read(g,n);
For i:=1 to n do
Begin
For j:=1 to i do Read(g,A[i,j]);
Readln(g);
End;
Close(g);
End;

Function Max(i,j:Word):Word;
Begin
If i>j then max:=i
Else max:=j;
End;
Procedure Toiuu;
Var i,j :Word;
Begin
For i:=1 to n-1 do
Begin
F[i,0]:=-1; F[i,i+1]:=-1;
End;
F[0,0]:=0; F[1,1]:=A[1,1];
For i:=2 to n do
For j:=1 to i do
F[i,j]:=Max(F[i-1,j-1],F[i-1,j])+A[i,j];
End;
Procedure Truyvet(i,j :Word);
Begin
If (F[i,j]=F[i-1,j-1]+A[i,j]) then
Dec(j);
Dec(i);
If (i>0) then
Begin
Trace(i,j);
Write(g,a[i,j],' ');
End;
End;
Procedure Xuat;
Var i,iMax :Word;

Begin
Assign(g,fo);
Rewrite(g);
iMax:=1;
For i:=2 to n do
If (F[n,iMax]

Writeln(g,F[n,iMax]);
Truyvet(n,iMax);
Write(g,a[n,iMax]);
Close(g);
End;
Begin
Nhap;
Toiuu;
Xuat;
End.


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

1

Liên phân số

2

Số nguyên tố cùng nhau

3

Tìm đường hái quả

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

NTCN.PAS

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


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

HAIQUA.PAS

HAIQUA.INP

HAIQUA.OUT

LIENPS.PAS

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
1

q1 
q2 

1
... 

1

qn

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
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 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
13
4

12
15


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 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
45
41
13572
17942675
79422
23167
74625


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 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.



×