c) Tìm chỉ số k để chia dãy thành hai phần (mỗi phần đều có ít nhất một phần tử) sao cho tổng k phần tử đầu tiên của dãy và tổng các phần tử còn lại có khoảng cách lớn nhất. Nếu có nhiều[r]
Trang 1UBND HUYỆN QUẾ SƠN
PHÒNG GIÁO DỤC & ĐÀO TẠO KỲ THI HỌC SINH GIỎI LỚP 9 CẤP HUYỆN NĂM HỌC 2013-2014
Môn: Tin học
Thời gian làm bài: 150 phút (Không kể thời gian giao đề)
ĐỀ CHÍNH THỨC - VÒNG I
Bài 1: Số nguyên tố (3,0 điểm).
Viết chương trình cho phép nhập số tự nhiên N từ bàn phím rồi thực hiện:
a) Cho biết số tự nhiên N có phải là số nguyên tố không?
b) Cho biết số nguyên tố bé nhất lớn hơn N.
c) Số song tố là số nguyên tố mà tổng các chữ số của nó cũng là một số nguyên tố Hãy in ra các số song tố không lớn hơn N.
Yêu cầu: Thông báo KHONG CO khi không tìm thấy.
Bài 2: Tứ giác (3,0 điểm).
Viết chương trình cho phép nhập độ dài bốn cạnh AB, BC, CD, DA của tứ giác ABCD từ bàn phím rồi thực hiện:
a) Kiểm tra xem ABCD có phải là hình bình hành không?
b) Nếu ABCD là hình bình hành thì yêu cầu nhập độ dài đường chéo AC của
tứ giác rồi thực hiện:
- Kiểm tra sự phù hợp của độ dài đường chéo AC Yêu cầu nhập lại khi
độ dài đường chéo AC không phù hợp.
- Khẳng định chính xác hình dạng của tứ giác ABCD (là hình bình hành,
hình thoi, hình chữ nhật hay hình
vuông?).
- Tính diện tích tứ giác ABCD.
Trang 2Bài 3: Phân số (4,0 điểm).
Viết chương trình cho phép nhập hai số nguyên a, b là tử và mẫu của phân số a
b từ bàn phím rồi thực hiện:
a) Rút gọn phân số
a
b để được phân số tối giản
m
n . b) Khi viết phân số
m
n dưới dạng số thập phân, hãy cho biết chữ số thập phân thứ nhất.
c) Phân số
m
n luôn biểu diễn được dưới dạng liên phân số:
0 1 2
k 1 k
a
1
1 a
1 a
a
ví dụ:
0
1
1 2 2
Trong đó a0; a1; … ak là các số nguyên được xác định như sau:
- Chia tử cho mẫu lấy phần nguyên để được a0, lấy phần dư để được tử mới, giữ nguyên mẫu số.
- Lấy nghịch đảo phân số vừa có để được phân số mới.
- Lặp lại quá trình trên để được a1; a2 …
- Quá trình kết thúc khi được phân số có tử chia hết cho mẫu.
Quá trình biến đổi phân số
5
7 được thực hiện như sau:
Hãy in ra dãy số nguyên a0; a1; … ak trong biểu diễn phân số
m n
Trang 3UBND HUYỆN QUẾ SƠN
PHÒNG GIÁO DỤC & ĐÀO TẠO KỲ THI HỌC SINH GIỎI LỚP 9 CẤP HUYỆN NĂM HỌC 2013-2014
Môn: Tin học
Thời gian làm bài: 150 phút (Không kể thời gian giao đề)
ĐỀ CHÍNH THỨC - VÒNG II
Bài 1: Ước số (3,0 điểm).
Viết chương trình cho phép nhập từ bàn phím số nguyên dương N rồi thực hiện: a) In ra số X < N sao cho X là ước của N và X có giá trị lớn nhất.
c) In ra số nguyên dương Y ≤ N sao cho tổng các ước nguyên dương của Y là lớn nhất Nếu có nhiều số cùng thỏa mãn điều kiện thì in số có giá trị bé nhất
b) In ra số nguyên dương Z ≤ N sao cho Z có số lượng các ước nguyên dương nhiều nhất Nếu có nhiều số cùng thỏa mãn điều kiện thì in số có giá trị bé nhất.
Bài 2: Dãy số (3,0 điểm).
Viết chương trình cho phép nhập dãy số thực a1; a2; a3; …; an Khoảng cách giữa hai số là khoảng cách giữa hai điểm khi biểu diễn chúng trên trục số Thực hiện:
a) Tìm giá trị của cặp số (am, an) sao cho chúng có khoảng cách lớn nhất.
b) Tìm chỉ số k để cặp số liên tiếp trong dãy (ak; ak+1) có khoảng cách bé nhất Nếu có nhiều cặp số thỏa mãn thì in cặp có chỉ số k bé nhất.
c) Tìm chỉ số k để chia dãy thành hai phần (mỗi phần đều có ít nhất một phần tử) sao cho tổng k phần tử đầu tiên của dãy và tổng các phần tử còn lại có khoảng cách lớn nhất Nếu có nhiều chỉ số k thỏa mãn thì in chỉ số k bé nhất.
Trang 4Bài 3: Phân tích số (4,0 điểm).
Viết chương trình cho phép nhập vào từ bàn phím số tự nhiên N (1< N < 1000) Xuất ra màn hình các kết quả sau:
a) Phân tích số N thành tổng ba số nguyên dương a, b, c khác nhau (Các hoán vị của ba số a, b, c chỉ xem là một cách phân tích nên chỉ in ra một lần)
b) In ra số nguyên dương x và số nguyên dương k (k>1) sao cho tổng k số tự nhiên liên tiếp bắt đầu từ x bằng N Nếu có nhiều cặp số x, k thoả mãn thì in ra tất cả các cặp số x, k.
c) Tìm cặp số tự nhiên x, y lớn hơn 1 sao cho N = xy
Yêu cầu: Thông báo KHONG CO khi không tìm thấy.
Trang 5UBND HUYỆN QUẾ SƠN
PHÒNG GIÁO DỤC & ĐÀO TẠO KỲ THI HỌC SINH GIỎI LỚP 9 CẤP HUYỆN NĂM HỌC 2013-2014
Môn: Tin học
HƯỚNG DẪN CHẤM – VÒNG I
Bài 1: Số nguyên tố (3,0 điểm)
a) Code tham khảo:
Program So_nguyen_to;
Var n,nn,i:integer;
ok: boolean;
Function nguyento(x:integer):Boolean;
var i:integer;
Begin
nguyento:=x>1;
For i:=2 to x-1 do if x mod i = 0 then nguyento:=false;
End;
0,50
Function tong(n:integer):integer;
Var s:integer;
Begin
s:=0;
while n>0 do
Begin
s:=s+n mod 10; n:=n div 10;
End;
tong:=s;
End;
0,50
Begin
Write('Nhap N: ');Readln(n);
if nguyento(n) then writeln('a) So n la so nguyen to')
else writeln('a) So n khong la so nguyen to');
0,25
nn:=n; nn:=nn+1;
While not nguyento(nn) do nn:=nn+1;
ok:=false;
Write('c) Cac so song to khong lon hon n la: ');
For i:=2 to n do
if nguyento(i) and nguyento(tong(i)) then
Begin write(i,'; '); ok:=true end;
1,00
Trang 6if not ok then Write('KHONG CO');
Readln;
End.
b) Biểu điểm:
Bài 2: Tứ giác (3,0 điểm)
a) Code tham khảo:
Program Tu_giac;
Var AB,BC,CD,DA,AC,p,s:real;
Begin
Repeat
Write('Nhap AB = ');Readln(AB);
Write('Nhap BC = ');Readln(BC);
Write('Nhap CD = ');Readln(CD);
Write('Nhap DA = ');Readln(DA);
Until (AB>0) and (BC>0) and (CD>0) and (DA>0);
if (AB = CD) and (BC = DA) then
Begin
Writeln('Tu giac ABCD la hinh binh hanh');
0,50
Repeat
Write('Nhap duong cheo AC = ');Readln(AC);
if (AB <> BC) and (AB*AB+BC*BC <> AC*AC) then
Writeln('ABCD la hinh binh hanh');
if (AB <> BC) and (AB*AB+BC*BC = AC*AC) then
Writeln('ABCD la hinh chu nhat');
if (AB = BC) and (AB*AB+BC*BC <> AC*AC) then
Writeln('ABCD la hinh thoi');
if (AB = BC) and (AB*AB+BC*BC = AC*AC) then
Writeln('ABCD la hinh vuong');
1,00
p:= (AB+BC+AC)/2;
s:=2*sqrt(p*(p-AB)*(p-BC)*(p-AC));
Writeln('Dien tich cua tu giac la: ',S:4:2);
End
0,75
else Write('Tu giac ABCD khong la hinh binh hanh');
Readln;
b) Biểu điểm:
a) Kiểm tra được ABCD có/không là hình bình hành
Kiểm tra được số đo các cạnh tứ giác là số dương
3 1
0,50 0,25 b)
Xác định chính xác hình tính của tứ giác ABCD.
(Xây dựng 3 test tương ứng với 3 hình Riêng trường hợp hình vuông
căn cứ code để cho điểm)
0,25
Trang 7Bài 3: Phân số (4,0 điểm)
a) Code tham khảo:
Program Phan_so;
Var a,b,d :integer;
x:real;
Function UCLN(a,b:integer):integer;
Var r:integer;
Begin
if b=0 then r := 0 else r:= a mod b;
while r<>0 do
Begin
a:=b;
b:=r;
r:=a mod b;
End;
if b<>0 then UCLN:=b else UCLN:=a;
End;
0,50
Begin
Write('Nhap a: ');Readln(a);
Repeat
Write('Nhap b: ');Readln(b);
until b<>0;
0,50
d:=UCLN(a,b);
a:=a div d; b:=b div d;
if b<>1 then Writeln('a) Phan so sau khi rut gon:
',a,'/',b)
else Writeln('a) Phan so sau khi rut gon: ',a) ;
0,75
Writeln('b) Chu so thap phan thu nhat la: ', (a mod b)*10
Write('c) Day so bieu dien: ');
while (a mod b) <> 0 do
Begin
Write(a div b,'; '); a:=a mod b;
d:=a; a:=b; b:=d;
End;
Write (a div b,';');
Readln;
End.
1,50
b) Biểu điểm:
a)
Test đúng với b = 0 (Yêu cầu nhập lại b)
In đúng phân số khi kết quả rút gọn là số nguyên.
1 1
0,25 0,25
Trang 8UBND HUYỆN QUẾ SƠN
PHÒNG GIÁO DỤC & ĐÀO TẠO KỲ THI HỌC SINH GIỎI LỚP 9 CẤP HUYỆN NĂM HỌC 2013-2014
Môn: Tin học
HƯỚNG DẪN CHẤM – VÒNG II
Bài 1: Ước số (3,0 điểm).
a) Code tham khảo:
Program Uoc_so;
Var N,i,x,y,z,Maxt, Max: Integer;
ok:boolean;
Function souoc(a:integer):integer;
Var i,d:integer;
Begin
d:=0;
For i:=1 to a do if a mod i = 0 then d:=d+1;
souoc:=d;
End;
0,50
Function tonguoc(a:integer):integer;
Var i,d:integer;
Begin
d:=0;
For i:=1 to a do if a mod i = 0 then d:=d+i;
tonguoc:=d;
End;
0,50
Function Uoclon(x:integer):integer;
Var a:integer;
Begin
a:=x-1;
while (x mod a) <>0 do a:=a-1;
Uoclon :=a;
End;
0,50
Begin
Repeat Write('Nhap N: ');Readln(n);
until n>0;
if n>1 then Writeln('a) So X la uoc lon nhat cua ', n, ' la:
',uoclon(n))
else Writeln('a) Khong ton tai so X');
0,50
maxt:=tonguoc(1); y:=1;
For i:=1 to n do
if tonguoc(i)>maxt then
Begin
maxt:=tonguoc(i); y:=i;
0,50
Trang 9End;
Writeln('b) So Y co tong uoc lon nhat la: ',y);
max:=souoc(1); z:=1;
For i:=1 to n do
if souoc(i)>max then
Begin max:=souoc(i); z:=i;
End;
Writeln('c) So Z co so uoc nhieu nhat la: ',z);
Readln;
End.
0,50
b) Biểu điểm:
a)
Bài 2: Dãy số (3,0 điểm).
a) Code tham khảo:
Program day_so;
Var n,i,k,kk:integer;
M:array[1 10] of real;
Max, Min, S,ss:real;
Begin
repeat
Write('Nhap so phan tu cua day: ');Readln(n);
until n>1;
For i:=1 to n do
Begin
Write('M[',i,']= '); Readln(M[i]);
End;
0,25
Min:=M[1];Max:=M[1];
For i:=2 to n do
Begin
if M[i]> Max then Max:=M[i];
if M[i]< Min then Min:=M[i];
End;
Writeln('Cap so co khoang cach lon nhat la:
',Max:2:1,';',Min:2:1);
0,75
k:=1; Min:=abs(M[1]-M[2]);
For i:=2 to n-1 do
if abs(m[i]-m[i+1]) < Min then
Begin
Min:=abs(m[i]-m[i+1]);
k:=i;
End;
Writeln('Vi tri k cua cap lien tiep co khoang cach be nhat la:
',k);
1,00
S:=0;
For i:=1 to n do S:=S+M[i];
kk:=1; Max:=abs(s-2*m[1]);
For k:=1 to n-1 do
Begin
ss:=0;
for i:=1 to k do ss:=ss+m[i];
if abs(s-2*ss)>Max then
Begin
kk:=k;
Max:=abs(s-2*ss);
End;
End;
Writeln('Vi tri de chia la: ',kk);
1,00
Trang 10Readln;
End.
b) Biểu điểm
Bài 3: Phân tích số (4,0 điểm).
Program phan_tich_so;
Var n,x,y,z,k:longint;
ok:boolean;
Function tongk(x,k:integer):integer;
Var s,i:integer;
Begin
s:=0;
For i:=1 to k do s:=s+x+i-1;
tongk:=s;
End;
0,50
Function mu(x,y:longint):longint;
var p,i:longint;
Begin
p:=1;
For i:=1 to y do p:=p*x;
mu:=p;
End;
0,50
Begin
Write('Nhap so N: ');Readln(n); ok:=false;
Writeln('a) Phan tich n thanh tong ba so:');
For x:=0 to n do
For y:=x+1 to n do
For z:=y+1 to n do
if x+y+ z = n then
Begin Writeln(x,'+',y,'+',z,'=',n); ok:=true end;
if not ok then writeln('KHONG CO');
1,00
ok:=false;
Writeln('b) Phan tich n thanh tong k so tu nhien lien tiep: ');
For x:=1 to n do
For k:=2 to n do
if tongk(x,k)=n then
Begin Writeln('x= ',x,';k= ',k); ok:=true
End;
if not ok then writeln('KHONG CO');
1,00
ok:=false;
Writeln('c) Phan tich n thanh luy thua: ');
For x:=2 to n do
Begin
y:=2;
while mu(x,y)<=n do
Begin
if mu(x,y)=n then
Begin Writeln(x,'^',y,' = ',n); ok:=true
End;
y:=y+1;
1,00
Trang 11End;
End;
if not ok then writeln('KHONG CO');
Readln;
End.
b) Biểu điểm:
a)
c)