< ik Dữ liệu vào từ tệp văn bản BDFIBO.INP: chứa duy nhất một số S.. Dữ liệu đa ra tệp văn bản BDFIBO.OUT: chứa hai dòng Dòng 1: Chứa số K là số lợng các số đợc dùng ít nhất tìm đợc.. Dò
Trang 1SỞ GIÁO DỤC – ĐÀO TẠO
NAM ĐỊNH
ĐỀ THI CHỌN HỌC SINH GIỎI LỚP 9 THCS
Năm học 2006-2007 Mụn: TIN HỌC
Thời gian làm bài: 150 phỳt
(khụng kể thời gian giao đề)
Đề thi gồm 02 trang
Họ tên thí sinh: Chữ ký của giám thị 1:
Số báo danh: Chữ ký của giám thị 2:
Lập chơng trình giải các bài toán sau:
Bài 1: Biểu diễn số (7 điểm)
Dãy số Fibonaci F1, F2, , Fn, đợc định nghĩa qui nạp nh sau:
F1 = F2 = 1;
Fn = Fn-1 + Fn-2 với n>2 Yêu cầu: Cho số tự nhiên S (S< 231), phân tích số S thành tổng của các số thuộc dãy Fibonaci và số lợng các số đợc dùng là ít nhất
S = Fi1 + Fi2 + + Fik (1< i1< i2< < ik) Dữ liệu vào từ tệp văn bản BDFIBO.INP: chứa duy nhất một số S
Dữ liệu đa ra tệp văn bản BDFIBO.OUT: chứa hai dòng
Dòng 1: Chứa số K là số lợng các số đợc dùng ít nhất tìm đợc
Dòng 2: Chứa K số theo thứ tự tăng dần thể hiện chỉ số các số trong dãy Fibonaci tìm đợc (nếu có nhiều cách thì chỉ cần đa ra 1 cách)
Ví dụ về dữ liệu vào và dữ liệu ra
Bài 2: ảnh vệ tinh (7 điểm)
Để khảo sát một khu dân c ngời ta phân tích số liệu từ ảnh chụp do
vệ tinh gửi về Bức ảnh chụp có kích thớc NxM, đợc chia thành N hàng và
M cột Ta coi mỗi ngôi nhà có dạng hình chữ nhật Ô (i,j) là ô thuộc dòng i cột j trong bức ảnh có giá trị 1 hoặc 0 tơng ứng thuộc hoặc không thuộc vào một ngôi nhà Các ô trong cùng một ngôi nhà đều có giá trị bằng 1 Biết rằng các ngôi nhà không có phần trùng nhau có nghĩa l 2 ô thuộc vàoà 2 ô thuộc vào
2 ngôi nhà khác nhau không kề cạnh Từ một bức ảnh cho trớc, em hãy cho biết diện tích của ngôi nhà lớn nhất trong bức ảnh (mỗi ô là một đơn vị diện tích)
Dữ liệu vào từ tệp văn bản NHA.INP có cấu trúc
- Dòng 1 chứa 2 số N và M (N và M nguyên dơng và nhỏ hơn 100)
- Trong N dòng tiếp theo, mỗi dòng chứa M số 0 hoặc 1 Số thứ j của dòng i thể hiện giá trị của ô (i,j)
Dữ liệu đa ra tệp văn bản NHA.OUT chứa một số duy nhất là diện tích ngôi nhà lớn nhất tìm đợc
Trang 1
BDFIBO.INP BDFIBO.OUT
3 6
ĐỀ CHÍNH THỨC
Trang 2Ví dụ về dữ liệu vào và dữ liệu ra
Bài 3: Dãy tăng dần (6 điểm)
Ta gọi dãy số X1, X2, Xk là dãy tăng dần nếu với mọi giá trị của i (0<i<k ) đều thoả mãn Xi Xi+1
Cho một dãy số tự nhiên Hãy xoá khỏi dãy đã cho một số phần tử
và giữ nguyên thứ tự của các phần tử còn lại để đợc một dãy tăng dần có số phần tử lớn nhất
Dữ liệu vào từ tệp văn bản TANGDAN.INP có cấu trúc
- Dòng 1 chứa số N là số phần tử của dãy số ban đầu (0<N 20000)
- Dòng 2 chứa N số tự nhiên của dãy ban đầu theo đúng thứ tự (các số
đều nhỏ hơn 200)
Dữ liệu đa ra tệp văn bản TANGDAN.OUT chứa một số duy nhất là số các phần tử đợc giữ lại mà đảm bảo dãy tăng dần có số phần tử lớn nhất
Ví dụ về dữ liệu vào và dữ liệu ra
Chỳ ý: File chương trỡnh của bài 1 đặt tờn là BDFIBO.PAS.
của bài 2 đặt tờn là NHA.PAS
của bài 3 đặt tờn là TANGDAN.PAS
Hết
Trang 2
3 5
0 1 1 0 1
0 1 1 0 1
0 0 0 1 0
4
6
3 8 5 7 9 12
5 (chỉ bỏ số 8)
Trang 3SỞ GIÁO DỤC – ĐÀO TẠO ĐÁP ÁN VÀ HƯỚNG DẪN CHẤM
Mụn : TIN HỌC Lớp 9
Chấm bài bằng các test, chơng trình không chạy hoặc dữ liệu vào ra không phù hợp sẽ không đợc điểm Trờng hợp sai tên tệp chơng trình hoặc tệp dữ liệu vào ra thì sửa lại cho đúng, chấm bình thờng, trừ 2 điểm mỗi bài
Bài 1: Biểu diễn số 7 điểm
- Tạo K số Fibonaci và lu vào mảng F, số thứ K là số lớn nhất mà không lớn hơn S.
- Mảng X có N phần tử, chứa chỉ số của các số Fibonaci xuất hiện trong cách biểu diễn theo thứ tự giảm dần.
i:=0;
While S>0 do
Begin i:=i+1; while F[k] > S do k:=k-1; X[i]:=k; S:=S-F[k]; End
- In giá trị của mảng X theo thứ tự ngợc lại.
Chỉ chú ý khi xử lý số lớn, số Fibo thứ 47 là vợt qua phạm vi longint
(dùng mảng số thực để lu là tốt nhất) và không dùng F[1]
Bài 2: ảnh vệ tinh 7 điểm
- Nhập dữ liệu vào mảng X Phủ thêm các giá trị 0 ra bên ngoài
- For i:=1 to N do
For j:=1 to M do
If X[i,j]=1 then Begin d:=i; c:=j;
Whlie X[d,j]=1 do d:=d+1;
Whlie X[i,c]=1 do c:=c+1;
For a:=i to d do for b:=j to c do X[a,b]:=0;
If Max<(d-i)*(c-j) then Max:=(d-i)*(c-j);
End Bài 3: Dãy tăng dần 6 điểm
Dùng phơng pháp quy hoạch động
-Nhập dữ liệu vào mảng X (kiểu byte)
- Dùng mảng F để tính theo quy hoạch (kiểu integer)
F[1]:=1;
For i:=2 to N do Begin Max:=0;
For j:=1 to i-1 do
If X[j]<=X[i] Then If Max<F[j] then Max:=F[j];
F[i]:=Max+1;
End;
KQ:=1;
For i:=2 to N do If KQ<F[i] then KQ:=F[i];
ĐỀ CHÍNH THỨC