- Giám khảo có thể sử dụng chương trình gợi ý dưới đây để tính toán kết quả của dữ liệu vào.. - Đối với câu 1: Giám khảo phải tạo được 06 bộ test, chương trình học sinh đúng 01 bộ test g[r]
(1)Së Gd&§t kú thi CHäN häc sinh giái líp 11 thpt Qu¶ng bình năm học 2012 - 2013
M«n thi: tin häc
Đề thi thức (Khóa thi ngày 27 tháng năm 2013)
S Bỏo Danh: Thời gian làm bài: 180 phút (không kể thời gian giao đề)
(Đề thi gồm có 02 trang)
ĐỀ RA
Sử dụng ngôn ngữ lập trình Turbo Pascal để lập trình giải tốn sau:
Câu 1: (3,0 điểm) Tìm số TIMSO.PAS
Cho số nguyên dương X, đảo ngược trật tự chữ số X ta thu được một số nguyên dương Y, Y gọi số đảo ngược X.
Ví dụ: X = 613 Y = 316 số đảo ngược X.
Số nguyên dương Y gọi số nguyên tố có hai ước số và chính nó, số khơng phải số nguyên tố.
Cho hai số nguyên dương P Q (1 ≤ P ≤ Q ≤ 2109; Q - P ≤ 105).
Yêu cầu: Hãy tìm tất số nguyên dương X nằm thỏa mãn P ≤ X ≤ Q số đảo ngược số X số nguyên tố.
Dữ liệu vào: Cho file văn TIMSO.INP có cấu trúc sau:
- Dòng 1: Ghi hai số nguyên dương P Q, hai số ghi cách một dấu cách.
Dữ liệu ra: Ghi file văn TIMSO.OUT nhiều dòng, dòng ghi số ngun X tìm dược.
Ví dụ:
TIMSO.INP TIMSO.OUT
10 19 11
13 14 16 17
Câu 2: (3,5 điểm) Tính tổng TONG.PAS
Cho hai số nguyên dương M N, M có p chữ số N có q chữ số. u cầu: Tính tổng hai số M N.
Dữ liệu vào: Cho file văn TONG.INP có cấu trúc sau:
- Dòng 1: Ghi số nguyên dương p số lượng chữ số M (1 ≤ p ≤ 30000).
- Dòng 2: Ghi p chữ số M theo thứ tự từ trái sang phải, chữ số ghi cách dấu cách.
- Dòng 3: Ghi số nguyên dương q số lượng chữ số N (1 ≤ q ≤ 30000).
- Dòng 4: Ghi q chữ số N theo thứ tự từ trái sang phải, chữ số ghi cách dấu cách.
Dữ liệu ra: Ghi file văn TONG.OUT theo cấu trúc sau:
- Dòng 1: Ghi số nguyên dương k số lượng chữ số tổng tìm được.
- Dịng 2: Ghi k chữ số tổng tìm theo thứ tự từ trái sang phải, chữ số được ghi cách dấu cách.
Ví dụ:
(2)6
2 3 9 3
2 7
6
2
(Có 85% số test với p, q ≤20000; 15% số test với p, q >20000 ).
Câu 3: (3,5 điểm) Dãy chung dài DAYCON.PAS
Cho dãy số nguyên A gồm N phần tử a1, a2, , aNvà dãy số nguyên B gồm M
phần tử b1, b2, , bM Các phần tử dãy số có giá trị khác đôi một.
(1 ≤ ai, bj ≤ 2109; ≤ N ≤ 100; ≤ i ≤ N; 1 ≤ M ≤ 100; 1 ≤ j ≤ M).
Dãy C gọi dãy dãy A dãy C nhận từ dãy A bằng cách xóa số phần tử giữ nguyên thứ tự phần tử lại
Nếu dãy C dãy dãy A dãy dãy B dãy C được gọi dãy chung hai dãy A B.
Yêu cầu: Hãy tìm dãy C dãy chung hai dãy A B cho số lượng phần tử dãy C lớn nhất.
Dữ liệu vào: Cho file văn DAYCON.INP có cấu trúc sau: - Dòng 1: Ghi số nguyên dương N số lượng phần tử dãy A.
- Dòng 2: Ghi N số nguyên giá trị phần tử dãy A, số ghi cách dấu cách.
- Dịng 3: Ghi số nguyên dương M số lượng phần tử dãy B.
- Dòng 4: Ghi M số nguyên giá trị phần tử dãy B, số ghi cách dấu cách.
Dữ liệu ra: Ghi file văn DAYCON.OUT theo cấu trúc sau: - Dòng 1: Ghi số nguyên dương K số lượng phần tử dãy C.
- Dòng 2: Ghi K số nguyên giá trị phần tử dãy C, số ghi cách dấu cách.
- Dòng 3: Ghi K số nguyên dương số phần tử dãy A tương ứng với giá trị phần tử dãy C, số ghi cách nhau một dấu cách.
- Dòng 4: Ghi K số nguyên dương số phần tử dãy B tương ứng với giá trị phần tử dãy C, số ghi cách nhau một dấu cách.
Ví dụ:
DAYCON.INP DAYCON.OUT
6
9 12 15 5
3 12 15
4
3 12 15 2 6 1 5
(3)Së GD&§T kú thi CHäN häc sinh giái líp 11 THPT Quảng bình năm häc 2012 - 2013
M«n thi: tin häc
híng dÉn chÊm
I- Phương pháp:
- Giám khảo tạo liệu vào, tính tốn kết Thực chương trình của học sinh so sánh kết quả.
- Giám khảo sử dụng chương trình gợi ý để tính tốn kết quả của liệu vào.
- Đối với câu 1: Giám khảo phải tạo 06 test, chương trình học sinh đúng 01 test giám khảo cho 0.5 điểm Trong 06 test giám khảo phải tạo được 01 test có Q-P = 105, 01 test giá trị P, Q > 65535.
- Đối với câu 2: Giám khảo phải tạo 07 test, chương trình học sinh đúng 01 test giám khảo cho 0.5 điểm Trong 07 test giám khảo phải tạo được 01 test có P, Q > 20000.
- Đối với câu 3:
+ Có thể có nhiều kết đúng, học sinh đưa kết nhưng khác với kết giám khảo cho điểm tối đa.
+ Giám khảo phải tạo 05 test, chương trình học sinh 01 test giám khảo cho 0.7 điểm.
+ Đối với test: Nếu học sinh đưa số lượng phần tử dãy con chung giám khảo cho 0.3 điểm, đưa dãy chung giám khảo cho 0.2 điểm, đưa số phần tử dãy A dãy B ban đầu giám khảo cho 0.2 điểm Tổng điểm test 0.7 điểm.
II- Chương trình gợi ý: Câu 1: (3,0 điểm) Tìm số Program Tim_so;
Const fi='TIMSO.INP'; fo='TIMSO.OUT' ; Var P,Q:longint; Time:Longint;
Times:Longint absolute 0:$46C; Function NT(K:longint):Boolean; Var Can,i:Longint;
Begin
If (K=2) or (K=3) then Begin NT:=True;Exit; End; If (K<2) or (K mod = 0) or (K mod = 0) then Begin NT:=False; Exit; End;
NT:=True; i:=5;
Can:=Trunc(sqrt(K)); While i<=Can Begin
if (K mod i = 0) or (K mod (i+2) =0) then Begin NT:=False; Exit; End
ELse inc(i,6); End;
End;
Function Daoso(N:longint):longint; Var S:longint;
Begin S:=0;
While N<>0 Begin
S:=S*10+ (N mod 10); N:=N div 10;
End; Daoso:=S; End;
Procedure Read_Data; Var F:text;
Begin
(4)Read(f,P,Q); Close(f); End;
Procedure Write_Data; Var f:text;
j:longint; Begin
Assign(f,fo); Rewrite(f); for j:=P to Q
if NT(Daoso(j)) then Writeln(f,j); Close(f);
End; BEGIN
Time:=Times; Read_Data; Write_Data;
Writeln((Times-Time)/18.2:0:2); Readln;
END
Câu 2: (3,5 điểm) Tính tổng Program Tinh_tong;
Const fi= 'TONG.INP'; fo= 'TONG.OUT'; MaxN=30000;
Type mmc=Array [0 MaxN] of byte; Var N,M,Top:Longint;
A,B:mmc;C:^mmc; Procedure Read_Data; Var f:text;i:Longint; Begin
Assign(f,fi); Reset(f); Readln(f,N); For i:=1 to N Read(f,A[i]); Readln(f); Readln(f,M); New(C);
Fillchar(C^,Sizeof(C^),0); For i:=1 to M
Read(f,C^[i]); Close(f);
End;
Procedure Init; Var Tg,k:Longint; Begin
If M=N then Begin Top:=N;B:=C^;Exit End; If N > M Then
Begin Tg:=N-M;
For K:=M Downto B[K+Tg]:=C^[K]; Top:=N;
End Else Begin Tg:=M-N;
For K:=N Downto B[K+Tg]:=A[K]; A:=C^;
Top:=M; End;
Fillchar(C^,Sizeof(C^),0); End;
Procedure Process;
Var i,Nguyen,Tg:Longint; Begin
Nguyen:=0;
For i:= Top Downto Begin
Tg:=(A[i]+B[i]+Nguyen); C^[i]:= Tg mod 10; Nguyen:=Tg Div 10; End;
(5)Procedure Write_Data; Var f:text;i:Longint; Begin
Assign(f,fo); Rewrite(f); if C^[0]>0 then Begin
Writeln(f,Top+1); Write(f,C^[0],' '); End
Else
Writeln(f,Top); For i:=1 to Top Write(f,C^[i], ' '); Close(f);
Dispose(C); End;
BEGIN
Read_Data; Init; Process; Write_Data; END
Câu 3: (3,5 điểm) Dãy chung dài nhất Program Day_con;
Const fi='DAYCON.INP'; fo='DAYCON.OUT'; MaxN=101;
Type mmc=Array[0 MaxN] of Longint; mhc=Array[0 MaxN] of mmc; Var A,B,C:mmc;
L:mhc;
N,M,K:Longint; Time:Longint;
Times: Longint absolute 0:$46C; Procedure Read_Data;
Var f:Text; i:Longint; Begin
Assign(f,fi); Reset(f); Readln(f,N); For i:=1 to N Read(f,A[i]); Readln(f,M); For i:=1 to M Read(f,B[i]);
Fillchar(L,Sizeof(L),0); Close(f);
End;
Procedure Solution; Var i,j:Longint; Begin
For i:=1 to N For j:=1 to M Begin
if A[i] = B[j] then L[i,j]:=L[i-1,j-1]+1 Else
Begin
L[i,j]:=L[i,j-1];
If L[i-1,j] > L[i,j-1] then L[i,j]:=L[i-1,j]; End;
End; End;
Procedure Write_Data;
Var f:Text;i,j,Top:Longint;LA,LB:mmc; Begin
(6)Writeln(f,L[N,M]); Top:=0;
i:=N;j:=M;
While (i>0) and (j>0) Begin
if A[i] = B[j] then Begin
inc(Top); LA[Top]:=i; LB[Top]:=j; dec(i); dec(j); End Else
if L[i-1,j] > L[i,j-1] then dec(i)
Else dec(j); End;
For i:=Top Downto Write(f,A[LA[i]],' '); Writeln(f);
For i:=Top Downto Write(f,LA[i],' '); Writeln(f);
For i:=Top Downto Write(f,LB[i],' '); Close(f);
End; BEGIN
Time:=Times; Read_Data; Solution; Write_Data;
Writeln((Times-Time)/18.2:0:0); Readln;