SỞ GD & ĐT VĨNH PHÚC (Đề gồm 02 trang)
ĐỀ KSCL HSG LẦN I, NĂM HỌC 2017-2018 Môn: Tin học , Lớp 11
Thời gian làm bài:180 phút, không kể thời gian phát đề
Tổng quan đề thi:
TT Tên bài File chương trình File dữ liệu File kết quả Điểm
1 Đếm dãy DAY.PAS BAI1.INP BAI1.OUT 3
2 Kết quả xổ số XOSO.PAS BAI2.INP BAI2.OUT 3
3 Tìm số TIMSO.PAS BAI3.INP BAI3.OUT 4
BÀI 1. ĐẾM DÃY (6 điểm)
Tom là cậu bé đam mê toán học và tin học, cậu có thể viết thuật toán để giải được một số bài toán về số tự nhiên cơ bản. Tiếp tục tìm hiểu các thuật toán về số tự nhiên Tom phát hiện ra rằng số cách phân tích một số nguyên dương thành tổng các số nguyên dương có tính quy luật. Thầy giáo ra bài toán và Tom đang suy nghĩ xem quy luật phân tích đó như thế nào?
Yêu cầu: Nhập vào 1 số nguyên dương N (N<20) và một số nguyên dương S (S>N). Hãy liệt kê tất cả các cách phân tích số S thành các tổng số tự nhiên từ 1 đến N.
* Ví dụ
Dữ liệu vào Kết Quả
5 6 6=1+1+1+1+1+1
6=1+1+1+1+2 6=1+1+1+3 6=1+1+2+2 6=1+1+4 6=1+2+3 6=1+5 6=2+2+2 6=2+4 6=3+3 BÀI 2. BẢNG KẾT QUẢ XỔ SỐ (7 điểm)
Yêu cầu: Bảng kết quả xổ số được cho bởi mảng A=(a1,a2,..,aN) và B=(b1,b2,..,bN) trong đó A là mảng các số trúng giải, còn B là mảng số tiền thưởng của mỗi giair tương ứng. Hãy lập chương trình tính tổng số tiền thưởng cho các vé mang các số ghi trong mảng C=(c1,c2,..,cM) cho trước.
* Ví dụ:
Dữ liệu vào Kết Quả
4 5
7 9 12 56
100 200 250 500 7 12 6 16 5
350
BÀI 3. TÌM SỐ (7 điểm)
Yêu cầu: Cho 2 số nguyên dương a và b (a<b). Tìm tất cả các số nguyên tố nằm trong đoạn a đến b và số đó khi đổi sang xâu nhị phân thì được xâu nhị phân đối xứng.
* Ví dụ:
Dữ liệu vào Kết quả
5 58 5 7 9 15 17 21 27 31 33 45 51
---Hết---
Thí sinh không được sử dụng tài liệu, cán bộ không giải thích gì thêm
ĐÁP ÁN ĐỀ THI KHẢO SÁT HSG LỚP 11, LẦN 1 MÔN: TIN HỌC
Bài 1.
Program bai1;
Var x,t:array[0..20] of longint;
n,k,s:longint;
f,g:text;
Procedure try(i:longint);
Var j:longint;
BEGIN
for j:=x[i-1] to n-t[i-1]div 2 do Begin
x[i]:=j;
t[i]:=t[i-1]+j;
if t[i]=s then
Begin
write(g,s,'=');
for k:=1 to i-1 do write(g,x[k],'+');
writeln(g,x[i]);
end
else
try(i+1);
end;
end;
BEGIN
assign(f,'bai1.inp');
reset(f);
read(f,n,s);
assign(g,'bai1.out');
rewrite(g);
x[0]:=1;
T[0]:=0;
try(1);
close(f); close(g);
END.
Bài 2.
Program bai2;
Var m,n:longint;
a,b,c:array[1..1000] of longint;
f,g:text;
Procedure nhap;
Var i,j:longint;
Begin
assign(f,'Xoso.inp'); reset(f);
readln(f,n,m);
for i:=1 to n do read(f,a[i]);
readln(f);
for i:=1 to n do read(f,b[i]);
readln(f);
for j:=1 to m do read(f,c[j]);
close(f);
End;
Procedure xuly;
Var i,j, tien:longint;
Begin
assign(g,'xoso.out'); rewrite(g);
tien:=0;
for j:=1 to m do Begin
for i:=1 to n do
if c[j]=a[i] then tien:=tien+b[i];
end;
writeln(g,tien);
close(g);
end;
BEGIN nhap;
xuly;
END.
Bài 3.
Program bai3;
Var a,b:longint;
f,g:text;
Function kiemtra_nt(k:longint):boolean;
Var uoc,i:longint;
Begin
uoc:=0;
for k:=2 to k-1 do
if k mod i =0 then inc(uoc);
if uoc=0 then kiemtra_nt:=true else kiemtra_nt:=false;
End;
Function kiemtra_dx(k:longint):boolean;
Var xau:string;
m,du,i:longint;
Begin
xau:=''; m:=k;
while m<>0 do Begin
du:=m mod 2;
if du=0 then xau:='0'+xau else xau:='1'+xau;
m:=m div 2;
end;
kiemtra_dx:=true;
for i:=1 to length(xau) div 2 do if xau[i]<>xau[length(xau)-i+1] then Begin
kiemtra_dx:=false;
break;
End;
End;
Procedure xuly;
Var i:longint;
Begin
assign(g,'timso.out'); rewrite(g);
for i:=a to b do
if kiemtra_nt(i) and kiemtra_dx(i) then write(g,i,' ');
close(g);
end;
BEGIN
assign(f,'timso.inp'); reset(f);
readln(f,a,b);
xuly;
END.