Đề 1 thi học sinh giỏi tỉnh môn: tin học 9 thời gian: 150 phút

doc 9 trang Người đăng phongnguyet00 Lượt xem 1526Lượt tải 1 Download
Bạn đang xem tài liệu "Đề 1 thi học sinh giỏi tỉnh môn: tin học 9 thời gian: 150 phút", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Đề 1 thi học sinh giỏi tỉnh môn: tin học 9 thời gian: 150 phút
	ĐỀ SỐ 1
ĐỀ THI HỌC SINH GIỎI TỈNH
MÔN: TIN HỌC 9
Thời gian: 150 phút
Lập trình để giải các bài toán sau đây bằng ngôn ngữ Pascal 
Bài 1: (5 điểm) 
a. Nhập một dãy số nguyên có n phần tử (0< n £ 100)
b. Sắp xếp dãy vừa nhập theo thứ tự tăng dần, in ra màn hình dãy đã sắp thứ tự
c. Tìm trên dãy đã sắp xếp có phần tử x hay không, với x được nhập từ bàn phím.
Bài 2: (7 điểm)
Cho đa thức bậc n: A = anxn + an-1xn-1 ++ a1x + a0 
Trong đó an, an-1,a1,a0 là các hệ số nguyên có giá trị tuyệt đối không quá 100.
Biết rằng phương trình A = 0 nếu có nghiệm nguyên thì nghiệm nguyên đó chỉ có thể là ước số của hệ số a0.
Yêu cầu: Hãy tìm tất cả các nghiệm nguyên (nếu có) của phương trình A = 0.
Dữ liệu vào từ file ‘INTROOT.INP’:
Dòng đầu là số nguyên n (2≤n≤100)
Dòng thứ 2 ghi n+1 số nguyên tương ứng là các hệ số an, an-1,a1,a0 của đa thức (các số cách nhau ít nhất một khoảng trắng). 
Kết quả ghi vào file ‘INTROOT.OUT’ mỗi dòng ghi 1 nghiệm tìm được (nếu không có kết quả thì ghi ‘khong co’).
Ví dụ:
INTROOT.INP
INTROOT.OUT
4
1 -1 0 -2 -4
-1
2
(Giải thích: trong ví dụ trên thì phương trình x4-x3-2x-4=0 có 2 nghiệm nguyên là -1 và 2)
Hướng dẫn thêm: để tính biều thức A một cách hiệu quả nhất, người ta phân tích A thành dạng như sau:
A = (((anx + an-1)x + an-2)x + )x +a1)x + a0 
Bài 3: (8 điểm) 
Kỳ thi học sinh giỏi năm học 2008-2009 của tỉnh Bà Rịa-Vũng Tàu có 8 đội tuyển dự thi đến từ các huyện (TX, TP), số thứ tự các huyện được đánh số lần lượt từ 1 đến 8 là Vũng Tàu, Bà Rịa, Tân Thành, Châu Đức, Xuyên Mộc, Đất Đỏ, Long Điền, Côn Đảo. Mỗi thí sinh dự thi có một số báo danh duy nhất (là một số nguyên dương), mỗi đội tuyển của huyện tối đa 90 thí sinh. Sau khi thi xong Sở Giáo dục- Đào tạo tổ chức cho các thí sinh giao lưu với nhau, Ban tổ chức sắp xếp các thí sinh đứng thành một vòng tròn, để tạo điều kiện cho các thí sinh trong tỉnh được giao lưu với nhau Ban tổ chức yêu cầu các thí sinh cùng huyện không đứng gần nhau, các thí sinh thuộc 2 huyện có số thứ tự liền kề cũng không được đứng gần nhau. 
Yêu cầu: Hãy giúp Ban tổ chức chỉ ra một cách xếp thỏa mãn yêu cầu trên
Dữ liệu vào: file ‘pupil.inp’
Gồm có 8 dòng, dòng thứ i chứa các số báo danh của các thí sinh huyện thứ i, các số báo danh cách nhau ít nhất một dấu cách.
Dữ liệu ra: file ‘pupil.out’
(Mô tả cách xếp n thí sinh theo yêu cầu trên một vòng tròn, ta có thể mô tả trên một đường thẳng, trong đó thí sinh đầu và thí sinh cuối đứng gần nhau trên vòng tròn)
Gồm n dòng (n là tổng số thí sinh), mỗi dòng là số báo danh của thí sinh. Trong trường hợp không có cách nào thỏa mãn yêu cầu thì ghi là -1
Ví dụ
Pupil.inp
Pupil.out
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
16 17 18
19 20 21
22 23
1
22
16
7
17
23
2
18
8
3
9
10
4
11
5
12
6
13
19
14
20
15
21
HƯỚNG DẪN CHẤM
Lưu ý chung: Học sinh có thể viết theo cách khác, chương trình chạy cho kết quả đúng, cho điểm tối đa, ngược lại chấm theo hướng dẫn sau đây. Tùy theo mức độ sai, trừ điểm hợp lý, tổng số điểm không quá 50% điểm tối đa.
Bài 1: (5 điểm) 
- Nhập một dãy số nguyên: viết đúng cho 1 đ
- Sắp xếp dãy vừa nhập theo thứ tự tăng dần: viết đúng cho 1 đ
- Tìm phần tử x trên dãy: nếu học sinh sử dụng kỹ thuật tìm kiếm nhị phân thì cho 3 điểm, nếu tìm kiếm tuần tự thì cho 1 điểm
Bài 2: (7 điểm)
Thuật toán cho bài này: Cho i nhận giá trị lần lượt là các ước số của a[0] (kể cả ước âm). 
Nếu tinh A = 0 thì i là một nghiệm nguyên.
- Chương trình con khởi tạo và đọc dữ liệu từ file: thủ tục Ini, cho 1 điểm
- Chương trình con tính giá trị đa thức, hàm Polynormial(x), viết đúng và hợp lý cho 3 điểm, viết đúng nhưng chưa hợp lý cho 2 điểm.
- Chương trình tìm nghiệm, thủ tục Inroot, viết đúng cho 1 điểm
- Khai báo và xử lý chung cho 1 điểm
Bài 3: (8 điểm)
- Chương trình con khởi tạo và đọc dữ liệu, thủ tục Ini, viết đúng cho 2 điểm
- Chương trình con kiểm tra phần tử cuối và ghi kết quả lên file, thủ tục Test, viết đúng cho 1 điểm
- Chương trình con xây dựng cấu hình theo yêu cầu bài toán, thủ tục Try, viết đúng cho 4 điểm
- Khai báo và xử lý chung cho 1 điểm
Sau đây là các chương trình hoàn chỉnh để tham khảo thêm
****************************************************
Program bai1;
var a:array[1..100] of integer; i,j,n,t,x,p,q:integer;found:boolean;
Begin
 {********a. Nhap**************}
 Write('Nhap so phan tu cua day:');Readln(n);
 For i:=1 to n do readln(a[i]);
 {*********b. Sap xep, in day ra man hinh *************}
 For i:=1 to n-1 do
 For j:=1 to n-i do
 if a[j]>a[j+1] then
 begin
 t:=a[j];
 a[j]:=a[j+1];
 a[j+1]:=t;
 end;
 For i:=1 to n do write(a[i],' ');
 {***********c. Tim kiem *********************}
 Write('Nhap gia tri can tim:');
 Readln(x);
 p:=1;q:=n;
 found:=false;
 Repeat
 i:=(p+q) div 2;
 if a[i]= x then found:=true
 else if a[i]<x then p:=i
 else q:=i;
 Until (found)or(q-p=1);
 if found then Writeln('Tim thay',x,' tai vi tri ',i)
 else writeln('Khong tim thay');
 readln;
End.
***************************************************
Program bai2;
Var i,n:shortint;f:text; a:array[0..100]of shortint;
 Procedure Ini;
 Begin
 assign(f,'introot.inp');
 reset(f);
 readln(f,n);
 For i:=n downto 0 do read(f,a[i]);
 close(f);
 assign(f,'introot.out');
 rewrite(f);
 end;
 Function polynormial(x:integer):real;
 Var i:shortint;y:real;
 Begin
 y:=a[n];
 For i:=n-1 downto 0 do y:=y*x+a[i];
 polynormial:=y;
 End;
 Procedure introot;
 Begin
 For i:=abs(a[0]) downto -abs(a[0]) do
 if (i0) and(a[0] mod i = 0) then
 if polynormial(i)=0 then writeln(f,i);
 close(f);
 end;
Begin
 ini;
 introot;
End.
*************************************************************
Program Bai3;
var f:text; n:integer;
 candidate,x:array[0..630] of byte; free:array[1..630]of boolean;
 procedure ini;
 var sbd,i:integer;
 begin
 fillchar(candidate,630,0);
 candidate[0]:=10;
 fillchar(free,630,true);
 assign(f,'pupil.inp');
 reset(f);
 n:=0;
 For i:=1 to 8 do
 begin
 While not(eoln(f)) do
 begin
 read(f,sbd);
 candidate[sbd]:=i;
 inc(n);
 end;
 readln(f);
 end;
 end;
 Procedure test;
 var i:integer;
 begin
 if (abs(candidate[n]-candidate[1])>1) then
 begin
 assign(f,'pupil.out');
 rewrite(f);
 for i:= 1 to n do writeln(f,x[i]);
 close(f);
 halt;
 end;
 end;
 Procedure try(i:integer);
 var j:integer;
 begin
 for j:=1 to n do
 if (free[j]) and (abs(candidate[j]-candidate[x[i-1]])>1) then
 begin
 x[i]:=j;
 free[j]:=false;
 if i=n then test
 else try(i+1);
 free[j]:=true;
 end;
 end;
Begin
 ini;
 try(1);
end.

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

  • docDE_THI_TIN_HOC_9_CAP_THANH_PHO_NAM_2015_CO_DAP_AN.doc