Së GI¸O DôC Vµ §µO T¹O QU¶NG B×NH §Ò chÝnh thøc SBD kú thi CHäN häc sinh giái líp 11 n¨m häc 2008-2009 m«n: tin häc – KHèI kh«ng CHUY£N Thêi gian 180 phót, kh«ng kÓ thêi gian giao ®Ò ®Ò ra Sö dông ng«n ng÷ lËp tr×nh Pascal ®Ó lËp tr×nh gi¶i c¸c bµi to¸n sau: C©u 1 (3,0 ®iÓm): TÝnh tæng gi¸ trÞ c¸c ch÷ sè TONG.PAS Cho mét sè nguyªn d¬ng N. Yªu cÇu: H·y tÝnh tæng gi¸ trÞ c¸c ch÷ sè cña N. D÷ liÖu vµo: Cho trong file v¨n b¶n TONG.INP cã cÊu tróc nh sau: - Dßng 1: Ghi sè nguyªn d¬ng N (10 < N < 109). D÷ liÖu ra: Ghi ra file v¨n b¶n TONG.OUT theo cÊu tróc nh sau: - Dßng 1: Ghi ra tæng gi¸ trÞ c¸c ch÷ sè cña N. VÝ dô: TONG.INP TONG.OUT 13 4 C©u 2 (3,5 ®iÓm): T×m kÝ tù KITU.PAS Cho mét x©u St gåm c¸c kÝ tù tõ 'a' ... 'z' cã ®é dµi tèi ®a kh«ng qu¸ 255 kÝ tù. Yªu cÇu: H·y t×m tÊt c¶ c¸c kÝ tù xuÊt hiÖn trong x©u St Ýt nhÊt hai lÇn. D÷ liÖu vµo: Cho trong file v¨n b¶n KITU.INP cã cÊu tróc nh sau: - Dßng 1: Ghi c¸c kÝ tù cña x©u St, c¸c kÝ tù ®îc viÕt liÒn nhau. D÷ liÖu ra: Ghi ra file v¨n b¶n KITU.OUT theo cÊu tróc nh sau: - Dßng 1: NÕu kh«ng t×m ®îc kÝ tù tháa m·n yªu cÇu th× ghi sè -1. Ngîc l¹i th× ghi c¸c kÝ tù t×m ®îc theo thø tù t¨ng dÇn cña m· ASCII, c¸c kÝ tù ghi liÒn nhau. VÝ dô: KITU.INP KITU.OUT KITU.INP KITU.OUT hchcsucaaf ach hkcsuaf -1 C©u 3 (3,5 điểm): Sắp xÕp d·y số gi¶m dÇn SXDS.PAS Cho d·y sè gåm N phÇn tö cã gi¸ trÞ nguyªn d¬ng a1, a2, ..., aN Yªu cÇu: H·y s¾p xÕp d·y sè theo thø tù gi¶m dÇn. D÷ liÖu vµo: Cho trong file v¨n b¶n SXDS.INP cã cÊu tróc nh sau: - Dßng 1: Ghi sè nguyªn d¬ng N (1 ≤ N ≤ 32000). - Dßng 2: Ghi N sè nguyªn d¬ng xi lµ gi¸ trÞ cña c¸c phÇn tö trong d·y. C¸c sè ®îc ghi c¸ch nhau Ýt nhÊt mét dÊu c¸ch (0 < xi ≤ 16000; 1 ≤ i ≤ N). D÷ liÖu ra: Ghi ra file v¨n b¶n SXDS.OUT theo cÊu tróc nh sau: - Dßng 1: Ghi N sè nguyªn d¬ng lµ gi¸ trÞ cña N phÇn tö trong d·y sau khi ®· s¾p xÕp. C¸c sè ®îc ghi c¸ch nhau Ýt nhÊt mét dÊu c¸ch. Giíi h¹n thêi gian thùc hiÖn ch¬ng tr×nh kh«ng qu¸ 0,5 gi©y ®èi víi mét bé d÷ liÖu vµo. Trong ®ã cã 85% bé d÷ liÖu vµo cã gi¸ trÞ cña N> 16000. VÝ dô: SXDS.INP SXDS.OUT 7 16000 10 9 6 2 2 1 6 9 2 10 2 16000 1 Së GI¸O DôC Vµ §µO T¹O QU¶NG B×NH Híng dÉn chÊm ==== HÕt ==== kú thi CHäN häc sinh giái líp 11 n¨m häc 2008-2009 m«n: tin häc – KHèI kh«ng CHUY£N I- Ph¬ng ph¸p: - Gi¸m kh¶o t¹o bé d÷ liÖu vµo, tÝnh to¸n kÕt qu¶. Thùc hiÖn ch¬ng tr×nh cña häc sinh vµ so s¸nh kÕt qu¶. - 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. 1 - Ch¬ng tr×nh häc sinh ®óng mét bé test, gi¸m kh¶o cho 0,5 ®iÓm. Nh vËy, nÕu mét bµi cã 3 ®iÓm th× gi¸m kh¶o ph¶i t¹o 6 bé test. - §èi víi c©u 3: Giíi h¹n thêi gian thùc hiÖn ch¬ng tr×nh kh«ng qu¸ 0,5 gi©y ®èi víi mét bé d÷ liÖu vµo. Trong ®ã cã 85% bé d÷ liÖu vµo cã gi¸ trÞ cña N> 16000. II- Ch¬ng tr×nh gîi ý: C©u 1 (3,0 ®iÓm): TÝnh tæng gi¸ trÞ c¸c ch÷ sè Program tongcs; Const fi='Tong.inp'; fo='Tong.out'; Var N:Longint; Procedure Doc; Var f:Text; Begin Assign(f,fi); Reset(f); Readln(f,N); Close(f); End; Function Tong:Longint; Var T:Longint; Begin T:=0; While N > 0 do Begin T:=T+N mod 10; N:= N Div 10; End; Tong:=T; End; Procedure Ghi; Var f:Text; Begin Assign(f,fo); ReWrite(f); Write(f,tong); Close(f); End; BEGIN Doc; Ghi; END. C©u 2 (3,5 ®iÓm): T×m kÝ tù Program Tim_ki_tu; Const fi='Kitu.inp'; fo='Kitu.out'; Type mmc=Array['a'..'z'] of Byte; Var A:mmc; St:String; f:text; Procedure Doc; begin assign(f,fi); reset(f); readln(f,st); close(f); end; procedure xl; var i:byte; begin fillchar(a,sizeof(a),0); for i:=1 to length(st) do a[st[i]]:=a[st[i]] +1; end; procedure xuat; var ch:char; kt:boolean; begin assign(f,fo); rewrite(f); kt:=false; for ch:='a' to 'z' do 2 if a[ch]>=2 then begin kt:=true; write(f,ch); end; if kt=false then write(f,-1); close(f); end; Begin doc;xl;xuat;End. C©u 3 (3,5 ®iÓm): S¾p xÕp d·y sè gi¶m dÇn Program Sap_xep_day_so; Const fi='SXDS.inp'; fo='SXDS.out'; MaxN=16000; Type mmc = Array[1..MaxN] of word; Var A:mmc; N:word; Procedure Doc; Var f:Text; i,so:word; Begin Fillchar(A,sizeof(A),0); Assign(f,fi); Reset(f); Readln(f,N); For i:=1 to N do Begin Read(f,so); A[so]:= A[so] + 1; End; Close(f); End; Procedure Ghi; Var i,j:Word; f:Text; Begin Assign(f,fo); Rewrite(f); For i:=maxn downto 1 do For j:=1 to A[i] do Write(f,i,' '); Close(f); End; BEGIN Doc; Ghi; END. 3 ... Chơng trình học sinh test, giám khảo cho 0,5 điểm Nh vậy, có điểm giám khảo phải tạo test - Đối với câu 3: Giới hạn thời gian thực chơng trình không 0,5 giây liệu vào Trong có 85% liệu vào có giá