You are on page 1of 4

HỘ I THI TIN HỌ C TRẺ TOÀ N QUỐ C ĐỀ THI BẢNG B – TRUNG HỌC CƠ SỞ

LẦ N THỨ XXII – 2016 Thời gian làm bài 180 phút, không kể thời gian phát đề
ĐỀ CHÍNH THỨ C Địa điểm thi: Trườ ng Đại họ c Quy Nhơn
Thà nh phố Quy Nhơn, Bình Định

Bài 1: LƯỚI TAM GIÁC (30 điểm)


Đề thi nă ng lự c củ a trườ ng mầ m non SuperKids có mộ t bài toá n rấ t đơn giả n: Trên mặ t phẳ ng cho mộ t
tam giá c đều độ dài cạ nh là a (a là mộ t số nguyên), ngườ i ta đặ t a−1 điểm trên mỗ i cạ nh để chia đều
các cạ nh ra thà nh các đoạ n thẳ ng dài 1 đơn vị. Vớ i mỗ i cặ p hai điểm trên hai cạ nh khác nhau, ngườ i ta
vẽ mộ t đoạ n thẳ ng nố i chú ng nếu đoạ n thẳ ng nà y song song vớ i cạ nh thứ ba. Sau khi vẽ hết cá c đoạ n
thẳ ng như vậ y, ta thu đượ c mộ t lướ i các tam giá c đều cạ nh 1 đơn vị mà nhữ ng điểm trên mặ t phẳ ng ở
vị trí đỉnh củ a các tam giác đều đó đượ c gọ i là nút lưới.
Hình vẽ dướ i đâ y thể hiện lướ i tam giác đều đượ c xâ y dự ng vớ i a=4

Nhiệm vụ củ a các bé thí sinh là đếm số tam giá c đều có trong hình vẽ. Nó i mộ t cá ch chính xác, cá c bé
cầ n đưa ra số bộ ba nút lưới là ba đỉnh củ a mộ t tam giác đều có ba cạ nh song song vớ i ba cạ nh củ a
tam giá c ban đầ u. Như ví dụ trên, có thể đếm đượ c có 27 tam giá c đều bao gồ m: 16 tam giá c đều cạ nh 1
đơn vị, 7 tam giá c đều cạ nh 2 đơn vị, 3 tam giá c đều cạ nh 3 đơn vị và 1 tam giá c đều cạ nh 4 đơn vị.
Tuy bà i toá n khô ng khó vớ i cá c bé thí sinh trườ ng SuperKids nhưng lại là thách thứ c lớ n cho ban giám
khả o trong việc là m đá p á n chấm điểm. Hã y giú p ban giả m khả o đưa ra đá p số . Chú ý là vì đá p số rấ t
lớ n nên chỉ cầ n đưa ra số dư củ a đá p số khi chia cho 2016.
Em cầ n tạ o file kết quả có tên là TRIGRID.TXT gồ m 15 dò ng, mỗ i dò ng ghi mộ t số nguyên duy nhấ t là số
dư củ a số tam giác đếm đượ c khi chia cho 2016 ứ ng vớ i mộ t giá trị a trong bả ng dướ i đâ y:

Dò ng a TRIGRID.TXT
1 4 27
2 3
3 5
4 6
5 111
6 222
7 3333
8 4444
9 55555
10 666666
11 7777777
12 88888888
13 999999999
14 123456789123456789
15 100000000000000000
0
Chú ý: Kết quả tương ứ ng vớ i giá trị n nà o cầ n ghi ĐÚ NG trên dò ng tương ứ ng vớ i giá trị a đó

Trang 1
Bài 2. SỐ DƯ (30 điểm)
Giờ họ c về phép chia có dư tỏ ra quá dễ dà ng cho cá c bé trườ ng mầm non SuperKids, để tă ng tính hấ p
dẫ n cho giờ họ c, cô giá o muố n đặ t ra mộ t thách thứ c mớ i.
Cho ba số nguyên dương x ,n , m . Cô giá o xét dã y chữ số là biểu diễn thậ p phâ n củ a x và viết lặ p đi lặ p
lại dã y chữ số nà y n lầ n để đượ c biểu diễn thậ p phâ n củ a mộ t số y . Nhiệm vụ củ a các bé là phả i cho
biết số dư củ a y khi chia cho m .
Ví dụ vớ i x=12 , n=3 , m=8 . số y=121212 , số dư củ a y khi chia cho 8 là 4
Các bé là m việc rấ t hà o hứ ng và nhanh chó ng đưa ra kết quả, vấ n đề củ a cô giá o là cầ n biết kết quả
đú ng để phá t phiếu bé ngoan cho các bé làm đú ng và nhanh nhấ t. Em hã y giú p cô giá o tính toá n kết
quả .
Em cầ n tạ o file kết quả có tên là REMAINDER.TXT gồ m 15 dò ng, mỗ i dò ng ghi mộ t số nguyên duy nhấ t
là kết quả tìm đượ c ứ ng mộ t bộ giá trị x ,n , m dướ i đâ y:

Dò n x n m REMAINDER.TXT
g
1 12 3 8 4
2 2 15 17
3 456 6 1296
4 1234 100 9
5 11223344 1000000 142857
6 55667788 10000000 1000000007
7 1357 24682468 999999999
8 24680 1357913579 777777777
9 998 1000000000000 999
10 1234 11111111111111 30
11 1 222222222222222 123456789
12 2016 666666666666666 8888888888
13 11223344 555666777888999 1357924680
14 999999999999999967 999999999999999877 99999999999999998
9
15 123456789123456789 123456789123456789 98765432112345678
9
Chú ý: Kết quả tương ứ ng bộ dữ liệu nà o cầ n ghi ĐÚ NG trên dò ng tương ứ ng vớ i bộ dữ liệu đó

Bài 3. NÔNG TRẠI VUI VẺ (40 điểm)


Bả n đồ trang trạ i củ a ô ng Đô ng có thể mô tả như mộ t bả ng kích thướ c n × n đượ c chia thà nh lướ i ô
vuô ng đơn vị. Cá c hà ng củ a bả ng đượ c đá nh số từ 1 đến n từ trên xuố ng dướ i, các cộ t củ a bả ng đượ c
đá nh số từ 1 đến n từ trá i sang phả i. Ô nằ m ở hà ng i , cộ t j đượ c gọ i là ô ( i , j ).
Ô ng Đô ng là ngườ i rấ t trậ t tự vì vậ y ô ng đã bố trí xem kẽ nhữ ng chuồ ng trâ u và chuồ ng bò trong trang
trạ i củ a mình. Cụ thể là : nếu ô ( i , j ) có i+ j chẵ n thì ô ng sẽ đặ t mộ t chuồ ng trâ u; nếu ô ( i , j ) có i+ j lẻ thì
ô ng sẽ đặ t chuồ ng bò . Có thể thấ y rằ ng, theo cá ch thứ c như vậ y sẽ khô ng có hai chuồ ng giá p cạ nh nhau
cù ng nuô i trâ u hoặ c cù ng nuô i bò .
Vì số lượ ng chuồ ng rấ t lớ n, nên ô ng Đô ng thiết kế mộ t má y đếm tự độ ng. Cá ch thứ c là m việc củ a má y là
mỗ i khi ô ng Đô ng đưa và o mộ t phạ m vi hình chữ nhậ t đượ c giớ i hạ n bở i ô ở gó c trá i trên ( r 1 , c 1 ) và gó c
phải dướ i ( r 2 , c 2 ) thì má y đếm sẽ tự độ ng đếm số chuồ ng trâ u trong các ô thuộ c phạ m vi nà y (Nhữ ng ô

Trang 2
( i , j ) có r 1 ≤i ≤r 2 và c 1 ≤ j≤ c 2). Dĩ nhiên từ con số má y trả về cũ ng có thể suy ra số chuồ ng bò trong
phạm vi đó .
Lũ trâ u bò củ a ô ng Đô ng rấ t tinh nghịch và thô ng minh, chú ng phá t hiện ra rằ ng má y đếm số chuồ ng
trâ u dự a và o mà u lô ng củ a chú ng. Vì vậ y để “lừ a" má y đếm tự độ ng, nhữ ng con bò có thể nhuộ m đen
lô ng củ a chú ng để trô ng giố ng như trâ u và nhữ ng con trâ u cũ ng có thể nhuộ m và ng lô ng củ a chú ng để
trô ng giố ng như bò . Và o ngà y tổ chứ c kì thi tin họ c trẻ, ô ng Đô ng đượ c mậ t bá o rằ ng lũ trâ u bò ở hai
chuồ ng tạ i hai ô khá c nhau đã tiến hà nh nhuộ m lô ng chú ng theo cá ch trên, điều nà y khiến cho má y
đếm trâ u bò củ a ô ng hoạ t độ ng khô ng đượ c chính xá c. Ô ng Đô ng muố n nhờ các bạ n, dự a và o hoạ t độ ng
củ a má y và quy tắ c phâ n bố cá c chuồ ng ban đầ u, phá t hiện vị trí hai chuồ ng mà lũ gia sú c đã tự ý
nhuộ m đổ i mà u lô ng.
Thư viện
Chương trình củ a bạ n phả i đặ t tên là FARM.pas/FARM.cpp tù y theo ngô n ngữ lậ p trình bạ n sử dụ ng.
Chương trình phải khai bá o sử dụ ng mộ t thư viện đặc biệt đượ c ban giá m khả o cung cấ p để là m bài
toá n nà y. Thư viện gồ m có các file detect.pp (dà nh cho Pascal); detect.cpp và detect.h (dà nh cho C++).
Cách khai bá o:
Pascal: uses detect;
C++: include "detect.h"
Thư viện detect cung cấp các hà m và thủ tụ c sau đâ y mà bạ n có thể dù ng trong chương trình
FARM.pas/FARM.cpp.
Pascal: function get_n: longint
C++: int get_n()
Chương trình củ a bạ n cầ n phả i gọ i hà m nà y để nhậ n đượ c giá trị n . Giá trị n trả về đả m bả o
2 ≤ n≤ 100000. Hàm get_n này cần phải được gọi trước khi gọi bất cứ hàm nào khác của thư viện.
Pascal: function buffalo(r1, c1, r2, c2: longint): int64
C++: long long buffalo(int r1, int c1, int r2, int c2)
Hàm nà y trả về số chuồ ng trâ u ở các ô ( i , j ) mà r 1≤ i≤ r 2 và c 1≤ j ≤ c 2. Bạ n cầ n đả m bả o hà m nà y
đượ c gọ i vớ i các giá trị thoả mã n 1 ≤r 1 ≤r 2 ≤ n và 1 ≤ c 1≤ c 2≤ n . Nếu cá c tham số khô ng thoả mã n
hàm sẽ trả về giá trị -1. Nếu hà m nà y đượ c gọ i quá 1000000 lầ n, thư viện sẽ tự độ ng ngắ t chương trình
và bạ n bị ghi nhậ n 0 điểm.
Pascal: procedure answer(x1, y1, x2, y2: longint)
C++: void answer(int x1, int y1, int x2, int y2)
Bạ n cầ n gọ i hàm nà y để kết thú c chương trình. Cá c tham số ( x 1 , y 1 ) và ( x 2 , y 2 ) chỉ ra hai ô mà trâ u/bò
trong hai chuồ ng đó tự ý nhuộ m đổ i mà u lô ng.
Biên dịch
Nếu bạ n viết chương trình bằ ng Pascal, bạ n phải khai bá o sử dụ ng thư viện uses detect; ngay sau dò ng
tiêu đề chương trình (xem ví dụ cuố i bà i)
Nếu bạ n viết chương trình bằ ng C/C++, bạ n phải khai bá o sử dụ ng thư viện #include “detect.h” (xem ví
dụ cuố i bài). Nếu bạ n sử dụ ng Code Blocks hoặc DevCpp, bạ n nên tạ o mộ t Project có chứ a cả file bài
làm và các files thư viện cho tiện lợ i trong việc dịch chương trình.
Thử nghiệm chương trình
Trong quá trình làm bà i, bạ n đượ c cung cấ p:
Các file thư viện: detect.pas, detect.h và detect.cpp.

Trang 3
Các file chương trình mẫ u: sample_FARM.pas và sample_FARM.cpp Cá c bạ n có thể dự a và o hai file
chương trình mẫ u nà y để hiểu cách sử dụ ng thư viện. Lưu ý rằ ng hai chương trình mẫ u nà y khô ng phải
là chương trình tố t.
Ví dụ vớ i n=4 , sơ đồ bố trí cá c chuồ ng trâ u bò củ a ô ng Đô ng như sau (ô đen là chuồ ng trâ u)
1 2 3 4

2 *

3 *
4

Chương trình FARM.PAS có thể như sau:


program FARM;
uses detect;
var
n: LongInt;
begin
n := get_n;
if (n = 4) and
(buffalo(1, 2, 2, 3) = 1) and
(buffalo(2, 1, 3, 2) = 1) and
(buffalo(1, 1, 3, 1) = 2) and
(buffalo(3, 4, 3, 4) = 1) then
answer(2, 2, 3, 4);
end.
Chương trình FARM.CPP có thể như sau:
#include "detect.h"

int main() {
int n = get_n();
if (n == 4 && buffalo(1, 2, 2, 3) == 1 && buffalo(2, 1, 3, 2) == 1
&& buffalo(1, 1, 3, 1) == 2 && buffalo(3, 4, 3, 4) == 1) {
answer(2, 2, 3, 4);
}
return 0;
}

 HẾ T 

 Đề thi gồ m 4 trang.
 Giám thị khô ng cầ n giải thích gì thêm.
 Thí sinh khô ng sử dụ ng tài liệu trong khi thi.

Trang 4

You might also like