Microsoft Word TIN HOC DE CHINH THUC 1 SỞ GDĐT LÀO CAI KỲ THI TUYỂN SINH LỚP 10 THPT CHUYÊN NĂM HỌC 2019 2020 Môn TIN HỌC (chuyên Toán Tin) Thời gian 150 phút, không kể thời gian giao đề Đề thi gồm 0.
Trang 11
NĂM HỌC 2019-2020
Môn: TIN HỌC (chuyên Toán-Tin) Thời gian: 150 phút, không kể thời gian giao đề
Đề thi gồm: 03 trang
Thí sinh sử dụng ngôn ngữ lập trình Pascal hoặc C++ để viết chương trình trên giấy thi giải các bài toán sau:
Câu 1:(3 điểm) Viết các chương trình thực hiện:
1, Tính tổng 𝑆 = 1 − + − … + (−1)
( ) Với n, x là số nguyên dương được nhập từ bàn phím
2, Số “Siêu chính phương” là số có dạng 𝑁 = 𝑖 + 𝑗 + 𝑘 + 𝑙 𝑣ớ𝑖 𝑁 ≤ 10 Viết chương trình nhập vào số nguyên dương N, kiểm tra xem số đó là “Siêu chính phương” hay không? Nếu là đúng thì in ra màn hình dòng “Siêu chính phương” còn không in ra “Không siêu chính phương”
Ví dụ: 53=22+22+32+62; 94=22+42+52+72 nên 53, 94 là các số siêu chính phương Câu 2(4 điểm): Cho dãy dãy số nguyên 𝑎 , 𝑎 , … 𝑎 (𝑛 ≤ 1000) và số nguyên dương K Viết chương trình thực hiện các yêu cầu sau:
1, Nhập dãy, in dãy theo chiều đảo ngược từ cuối lên
2, Số “May mắn” là số có ước nguyên tố lớn nhất bằng K Ví dụ số 10 có các ước
1, 2, 5, số 3 có ước là 1, 3 với K=5 thì số 10 là số “May mắn” In các số “May mắn” của dãy ra màn hình
3, Dãy đối xứng là dãy khi ta viết ngược từ cuối dãy về đầu dãy thì nó vẫn là dãy ban đầu Ví dụ: 1 1 2 2 1 1 là dãy đối xứng Kiểm tra xem dãy đã cho có phải dãy đối xứng hay không? Nếu dãy là đối xứng thì in ra “Yes” ngược lại in ra “No”
Ví dụ:
N=7 K=5
15 5 3 7 9 12 10
Dãy đảo ngược: 10 12 9 7 3 5 15
Số may mắn: 12 10 Dãy đối xứng: No
Câu 3 (1 điểm) Chọn quà
Sắp đến tết, trường bạn An phát động đợt quyên góp ủng hộ các bạn nhỏ vùng cao Tất cả học sinh trong trường đều tham gia rất nhiệt tình; bạn thì ủng hộ quần
áo, bạn thì ủng hộ bánh kẹo, sách vở,… Vì số quà ủng hộ rất nhiều nên nhà trường
dự định sẽ mang các món quà này đi ủng hộ ở nhiều nơi Do có nhiều nơi để đi nên đội tình nguyện của nhà trường sẽ chia thành các nhóm khác nhau; mỗi nhóm sẽ đi
ĐỀ CHÍNH THỨC
Trang 22
một nơi và mỗi nơi chỉ có một xe chở đồ đi cùng Các nhóm tình nguyện sẽ tự chọn các món quà và sắp xếp lên xe Nhóm của An cũng được phân cho một chiếc xe để chở quà Xe chỉ có thể chở được hàng có tổng tải trọng không quá K, các bạn trong nhóm muốn chọn các món quà để xếp lên xe sao cho số lượng quà là nhiều nhất có thể Vì thời gian không còn nhiều nên nhóm An muốn nhờ em chọn giúp những món quà sẽ xếp lên xe sao cho được nhiều quà nhất
Dữ liệu vào:
- Hai số N, K - là số món quà và tải trọng tối đa của xe (N 10 ,K 10 3 8)
i
a 10 (i 1,2, N) là trọng lượng các món quà
Kết quả ra: Trọng lượng của từng món quà được chọn
Ví dụ:
Nhập vào số: N=10, K=15
Nhập dãy số: 2 14 3 1 4 11
31 21 5 8
Chon cac mon qua co trong luong: 1 2 3 4 5
Câu 4(1 điểm) Quà tặng ngày 01-06
Nhân dịp ngày Quốc tế thiếu nhi 01-06 siêu thị ABC tổ chức chương trình trò chơi cho các bạn học sinh như sau: Trong siêu thị có n mặt hàng đươc xếp thành một hàng, mỗi mặt hàng có giá trị là ai nhưng do một số mặt hàng rất đặc biệt nên siêu thị để giá âm Các bạn học sinh được phép chọn một số mặt hàng xếp liên tiếp nhau trong n mặt hàng Người thắng cuộc là người chọn được dãy các mặt hàng liên tiếp nhau có tổng giá trị lớn nhất
Dữ liệu vào: Nhập từ bàn phím
Dãy số nguyên 𝑎 , 𝑎 , … 𝑎 (𝑛 ≤ 10 ) và số N
Dữ liệu ra: Là tổng giá trị lớn nhất của các mặt hàng 𝑎 + 𝑎 + ⋯ +𝑎 𝑣ớ𝑖 𝑖 < 𝑗
Lưu ý:
1, Nếu xử lí được bài toán với 𝑛 ≤ 100 được 0.5 điểm
2, Nếu xử lí được bài toán với 𝑛 ≤ 1000 được 0.75 điểm
3, Nếu xử lí được bài toán với 𝑛 ≤ 10 được 1.0 điểm
Ví dụ:
N= 10
1 3 -11 -5 7 -8 1 2 3 10
16 (Chọn các mặt hàng từ i=7 đến j=10)
Câu 5:(1 điểm) Bắt tay
Trong giờ đợt tập quân sự đầu năm của trường THPT chuyên Lào Cai các thầy cô dạy môn giáo dục Quốc phòng cho các bạn học sinh xếp thành 2 hàng song
Trang 33
song và quay mặt vào nhau: hàng thứ nhất có n học sinh, mỗi học sinh có chiều cao
là 𝑎 , 𝑎 , … 𝑎 (𝑛 ≤ 10 ) 0 < 𝑎 ≤ 200𝑐𝑚, hàng học sinh thứ 2 cũng có n học sinh chiều cao của mỗi học sinh tương ứng là 𝑏 , 𝑏 , … 𝑏 (𝑛 ≤ 10 ) 0 < 𝑏 ≤ 200𝑐𝑚 tất cả các bạn đều nhớ chính xác chiều cao của mình Các thầy cô tổ chức cho 2 hàng học sinh này bắt tay nhau theo nguyên tắc là các bạn có cùng chiều cao thì mới được bắt tay nhau Hỏi có bao nhiêu cái bắt tay được bắt? Bạn hãy viết chương trình tính số cái bắt tay
Dữ liệu vào: Nhập từ bàn phím
Dãy 𝑎 , 𝑎 , … 𝑎 (𝑛 ≤ 10 ) và 𝑏 , 𝑏 , … 𝑏 (𝑛 ≤ 10 ), số N
Dữ liệu ra: Ghi số cái bắt tay
Ví dụ: có n= 8 học sinh và chiều cao tương ứng của 2 hàng là:
Hàng 1: 7 4 2 8 6 4 2 4
Hàng 2: 3 7 2 1 2 7 1 4
Kết quả: Có 9 cái bắt tay được bắt
Giải thích: Có các cặp (a1,b2), (a1,b6), (a2,b8), (a3,b3), (a3, b5), (a6,b8), (a7,b3), (a7,b5), (a8,b8)
Chú ý:
- Thuật toán sử dụng 3 vòng lặp lồng nhau thì sẽ giải quyết được bài toán với 𝒏 ≤ 𝟏𝟎𝟎
- Thuật toán sử dụng 2 vòng lặp lồng nhau thì sẽ giải quyết được bài toán với 𝒏 ≤ 𝟏𝟎𝟎𝟎
- Thuật toán sử dụng 1 vòng lặp thì sẽ giải quyết được bài toán với 𝒏 ≤ 𝟏𝟎 𝟔
-Hết -
- Thí sinh không sử dụng tài liệu
- Cán bộ coi thi không giải thích gì thêm
SỞ GIÁO DỤC VÀ ĐÀO TẠO
LÀO CAI
ĐÁP ÁN – THANG ĐIỂM TUYỂN SINH VÀO LỚP 10 THPT CHUYÊN
Môn thi: Tin học – chuyên (Đáp án-thang điểm gồm có 06 trang)
Lưu ý:
- Học sinh có thể không sử dụng chương trình con để giải nhưng đúng vẫn cho đủ số điểm điểm
- Học sinh có cách giải khác, nhưng chính xác vẫn cho đủ số điểm
ĐỀ CHÍNH THỨC
Trang 44
Câu 1:(3 điểm)
( ) Với n, x là số nguyên dương được nhập từ bàn phím
Program tong;
Var s:real;
X,I,n: integer;
Begin
Writeln(‘nhap vao so n, x=’); readln(n,x);
S:=1; tu:=1;
For i:=1 to n do
Begin
Tu:=tu*x;
If I mod 2=0 then
S:=s+tu/(2*i+1)
Else
S:=s-tu/(2*i+1);
End;
Writeln(‘tong la’, s:6:2);
End
2, Số “Siêu chính phương” là số có dạng 𝑁 = 𝑖 + 𝑗 + 𝑘 + 𝑙 𝑣ớ𝑖 𝑁 ≤ 10 Viết
chương trình nhập vào số nguyên dương N, kiểm tra xem số đó là “Siêu chính
phương” hay không? Nếu là đúng thì in ra màn hình dòng “Siêu chính phương” còn
không in ra “Không siêu chính phương”
Ví dụ: 53=22+22+32+62; 94=22+42+52+72
Program sieuchinhphuong;
Var ok:boolean;
I,j,k,l,n: integer;
Begin
ok:=true;
For i:=1 to N do
if (sqr(i) <=N) and ok then
for j:=i to N do
if (sqr(i)+sqr(j) <=N) and ok then
For k:=j to N do
if (sqr(i)+sqr(j)+sqr(k) <=N) and ok then
For l:=k to N do
If (sqr(i)+ sqr(j)+ sqr(k) + sqr(l)= N) and ok then
begin
writeln(‘Sieu chinh phuong’);
ok:=false;
end;
if ok then write(‘Khong sieu chinh phuong’);
End
0,25 0.25
0.5 0.5
0.25
0.5 0.5
0.25
Trang 55
Chú ý: Nếu học sinh làm bằng 4 vòng for lồng thì chỉ được 1 điểm/1.5 điểm
For i:=1 to n do
For j:=1 to n do
For k:=1 to n do
For l:=1 to n do
If (sqr(i)+ sqr(j)+ sqr(k) + sqr(l)= N) then
begin
writeln(‘Sieu chinh phuong’);
ok:=false;
end;
if ok then write(‘Khong sieu chinh phuong’);
Câu 2(4 điểm): Cho dãy dãy số nguyên 𝑎 , 𝑎 , … 𝑎 (𝑛 ≤ 1000) và số nguyên
dương K Viết chương trình thực hiện các yêu cầu sau:
1, Nhập dãy, in dãy theo chiều đảo ngược từ cuối lên – 1 điểm
Program cau2;
Var a:array[1 10000] of integer;
I,n,k: integer;
Procedure nhap_in;
Begin
Writeln(‘nhap vao so n,k=’); readln(n,k);
For i:=1 to n do readln(a[i]);
For i:=n downto 1 do write(a[i],’ ‘);
End;
2, Số “May mắn” là số có ước nguyên tố lớn nhất bằng K, in ra các số “May mắn”
trong dãy: Ví dụ số 10 có các ước 1, 2, 5 với K=5 thì số 10 là số “May mắn” In
rác số “May mắn” của dãy ra màn hình – 1 điểm
Function ktngto(x:integer):boolean;
Begin
Ktngto:=true;
If x< 2 then ktngto:=false;
If x=2 then ktngto:=true;
For i:=2 to trunc(sqrt(x)) do
If x mod i =0 then
Begin
Ktngto:=false;
Break;
End;
Function somayman (n,k:integer):boolean;
Var max:integer;
Begin
For i:=1 to n do
If (I mod 2=0) and (ktngto(i)) and (max<i) then
Max:=I;
0.5 0.5
0.5
0.5
Trang 66
somayman:=max=k;
End;
Procedure ktsomaynam;
Begin
For i:=1 to n do
If somayman(a[i],k) then
Write(a[i],’ ‘);
End;
3, Dãy đối xứng là dãy khi ta viết ngược từ cuối dãy về đầu dãy thì nó vẫn là dãy
ban đầu Ví dụ: 1 1 2 2 1 1 là dãy đối xứng Kiểm tra xem dãy đã cho có phải dãy
đối xứng hay không? Nếu dãy là đối xứng thì in ra “Yes” ngược lại in ra “No”
Procedure doixung;
Var ok: boolean;
Begin
Ok:=true;
For i:=1 to n div 2 do
If a[i]<> a[n-i+1] then ok:=false;
If ok then writeln(‘Yes’)
Else writeln(‘No’)
Begin
Nhap_in;
Ktsomayman;
Doixung;
End
0.5
0.5 0.75
0.25
Câu 3 (1 điểm) Chọn quà
program CAU3;
const input='CAU3.INP';
output='CAU3.OUT';
var a:array[1 1000] of integer;
k:longint;
i,n:integer;
f:text;
procedure nhap;
begin
assign(f,input);
reset(f);
readln(f,n,k);
for i:=1 to n do read(f,a[i]);
close(f);
end;
procedure sort;
var j,tg:integer;
begin
for i:=n downto 2 do
for j:=1 to i-1 do
if (a[j]>a[j+1]) then
0.5
Trang 77
begin
tg:=a[j]; a[j]:=a[i]; a[i]:=tg;
end;
end;
procedure xuli;
begin
assign(f,output);
rewrite(f);
i:=1;
k:=k-a[1];
write(f,'Chon cac mon qua co trong luong: ');
while (k>=0) do
begin
write(f,a[i],' ');
i:=i+1;
k:=k-a[i];
end;
close(f);
end;
BEGIN
nhap;
sort;
xuli;
END
0,5
Câu 4(1 điểm) Quà tặng ngày 01-06
1, Viết chương trình giải bài toán trên với 𝑛 ≤ 100
Program cau4.1;
Var max,I,j,k:integer;
T: longint;
Begin
Writeln(‘nhap n=’); readln(n);
For i:=1 to n do readln(a[i]);
max:=0;
for j:=1 to n do
for i:=1 to j do
begin
T:=0;
for k:=I to j do T:=T+a[k];
if T>max then max:=T;
end;
writeln(max);
End
2, Viết chương trình giải bài toán trên với 𝑛 ≤ 1000
Program cau4.2;
Var max,I,j,k:integer;
T: longint;
Begin
Writeln(‘nhap n=’); readln(n);
0.5
Trang 88
For i:=1 to n do readln(a[i]);
ds:=a[1];
s[0]:=0;
for i:=1 to n do s[i]:=s[i-1]+a[i];
for j:=1 to n do
for i:=1 to j do
if s[j]-s[i-1]>max then max:=s[j]-s[i-1];
writeln(max);
End
3, Viết chương trình giải bài toán trên với 𝑛 ≤ 10
Program cau4.3;
Var min,I,j,k:integer;
T,kq: longint;
Begin
Writeln(‘nhap n=’); readln(n);
For i:=1 to n do readln(a[i]);
min:=0; kq:=a[1];
s[0]:=0;
for i:=1 to n do s[i]:=s[i-1]+a[i];
for j:=1 to n do
begin
if s[j]-min>kq then kq:=s[j]-min;
if s[j]<min then min:=s[j];
end;
writeln(kq);
End
0.75
1.0
Câu 5:(1 điểm) Bắt tay
- Nếu học sinh làm theo cái NxN thì cho 0.75 điểm
Program battay;
Var a,b: array[1 1000000] of integer;
C,d: array[1 205] of integer;
Begin
Writeln(‘nhap n=’); readln(n);
For i:=1 to n do readln(a[i]);
For j:=1 to n do readln(b[i]);
For j:=1 to 205 do begin c[i]:=0; d[i]:=0; end;
For j:=1 to n do
begin c[a[i]]:= c[a[i]]+1; d[b[i]]:= d[b[i]]+1; end;
For j:=1 to 205 do Tong:=tong+ c[i]*d[i];
Writeln(tong);
End
0.5
0.5