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]
(1)UBND HUYỆN QUẾ SƠN
PHÒNG GIÁO DỤC & ĐÀO TẠO KỲ THI HỌC SINH GIỎI LỚP CẤP HUYỆNNĂ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 thực hiện: a) Cho biết số tự nhiên N có phải số ngun tố khơng?
b) Cho biết số nguyên tố bé lớn N.
c) Số song tố số nguyên tố mà tổng chữ số số nguyên tố Hãy in số song tố không lớn N.
Yêu cầu: Thông báo KHONG CO 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 tứ giác ABCD từ bàn phím thực hiện:
a) Kiểm tra xem ABCD có phải hình bình hành khơng?
b) Nếu ABCD hình bình hành yêu cầu nhập độ dài đường chéo AC của tứ giác thực hiện:
- Kiểm tra phù hợp độ 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 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?).
(2)Bà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 tử mẫu phân số a
b từ bàn phím thực hiện: a) Rút gọn phân số
a
b để phân số tối giản m
n . b) Khi viết phân số
m
n dạng số thập phân, cho biết chữ số thập phân thứ nhất.
c) Phân số m
n biểu diễn dạng liên phân số:
k k m 1 a 1 n a 1 a 1 a a ví dụ: 5 1 0 1 7 1 1 2 2 Trong a0; a1; … ak số nguyên xác định sau:
- Chia tử cho mẫu lấy phần nguyên để a0, lấy phần dư để tử mới, giữ nguyên mẫu số.
- Lấy nghịch đảo phân số vừa có để phân số mới. - Lặp lại trình để a1; a2 …
- Quá trình kết thúc phân số có tử chia hết cho mẫu. Q trình biến đổi phân số
5
7được thực sau:
5 5 1 1 1 1
0 0 0 0 0
7 2 1 1
7 7 1 1 1
5 1
5 5 2
2 2
Hãy in dãy số nguyên a0; a1; … ak biểu diễn phân số m
(3)UBND HUYỆN QUẾ SƠN
PHÒNG GIÁO DỤC & ĐÀO TẠO KỲ THI HỌC SINH GIỎI LỚP CẤP HUYỆNNĂ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ố ngun dương N thực hiện: a) In số X < N cho X ước N X có giá trị lớn nhất.
c) In số nguyên dương Y ≤ N cho tổng ước nguyên dương Y là lớn Nếu có nhiều số thỏa mãn điều kiện in số có giá trị bé
b) In số nguyên dương Z ≤ N cho Z có số lượng ước nguyên dương nhiều Nếu có nhiều số thỏa mãn điều kiện 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ố khoảng cách hai điểm biểu diễn chúng trục số Thực hiện: a) Tìm giá trị cặp số (am, an) cho chúng có khoảng cách lớn nhất.
b) Tìm số k để cặp số liên tiếp 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 in cặp có số k bé nhất.
(4)Bà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 hình kết sau:
a) Phân tích số N thành tổng ba số nguyên dương a, b, c khác (Các hoán vị của ba số a, b, c xem cách phân tích nên in lần)
b) In số nguyên dương x số nguyên dương k (k>1) cho tổng k số tự nhiên liên tiếp x N Nếu có nhiều cặp số x, k thoả mãn in tất cả các cặp số x, k.
c) Tìm cặp số tự nhiên x, y lớn cho N = xy
(5)UBND HUYỆN QUẾ SƠN
PHÒNG GIÁO DỤC & ĐÀO TẠO KỲ THI HỌC SINH GIỎI LỚP CẤP HUYỆNNĂ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 if x mod i = 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) nn:=nn+1;
Writeln('b) So nguyen to be nhat lon hon n la: ',nn); 0,75
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;
(6)if not ok then Write('KHONG CO'); Readln;
End.
b) Biểu điểm:
a) Test với n >1 0,75
Test với n 1 0,25
b) Test 1,00
c) Test với n >1Test với n 1 0,750,25
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);
until (AC<(AB+BC)) and (AC>ABS(AB-BC)); 0,50
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;
End. 0,25
b) Biểu điểm:
a) Kiểm tra ABCD có/khơng hình bình hành Kiểm tra số đo cạnh tứ giác số dương
3 1
0,50 0,25 b)
Kiểm tra tính phù hợp độ dài đường chéo AC 2 0,50
Xác định xác hình tính tứ giác ABCD.
(Xây dựng test tương ứng với hình Riêng trường hợp hình vng căn code điểm)
3 0,75
0,25
(7)Bà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 := 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 rut gon: ',a,'/',b)
else Writeln('a) Phan so sau rut gon: ',a) ;
0,75 Writeln('b) Chu so thap phan thu nhat la: ', (a mod b)*10
div b); 0,75
Write('c) Day so bieu dien: '); while (a mod b) <> 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 với b 0 3 1,00
Test với b = (Yêu cầu nhập lại b)
In phân số kết rút gọn số nguyên.
1 1
0,25 0,25
b) Test 3 1,00
(8)UBND HUYỆN QUẾ SƠN
PHÒNG GIÁO DỤC & ĐÀO TẠO KỲ THI HỌC SINH GIỎI LỚP CẤP HUYỆNNĂ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 if a mod i = 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 if a mod i = 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 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;
(9)End;
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)
Test với n >1 2 0,50
Test với n =1 1 0,25
Test với n = 0 1 0,25
b) Test (4 test) 4 1,00
c) Test (4 test) 4 1,00
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 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 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);
(10)Readln; End.
b) Biểu điểm
a) Test với n >1 Test với n 1 31 0,750,25
b) Test 4 1,00
c) Test 4 1,00
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 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 p:=p*x; mu:=p;
End;
0,50
Begin
Write('Nhap so N: ');Readln(n); ok:=false; Writeln('a) Phan tich n 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 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 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;
(11)End; End;
if not ok then writeln('KHONG CO'); Readln;
End.
b) Biểu điểm: a)
Test với n>5 lặp 2 0,50
Test với n>5 không lặp 1 0,25
Test với n (Ghi rõ KHONG CO) 1 0,25
b) Test với trường hợp tìm thấy 5 1,25
Test với trường hợp khơng tìm thấy 1 0,25
c)
Test với trường hợp n < 200 4 1,00
Test với trường hợp 200 n 1000 1 0,25