Đăng ký Đăng nhập

Tài liệu Dethi_hsg_tin2013_v1

.DOC
6
208
73

Mô tả:

ĐỀ THI MÔN: TIN HỌC Ngày thi: 29/9/2013 Thời gian làm bài: 180 phút (Không kể thời gian phát đề) (Đề thi gồm có: 03 trang) Tổng quan đề thi. Bài Tên tệp chương trình Tên tệp input Tên tệp output Bài 1 B1.* XEPHANG.INP XEPHANG.OUT Bài 2 B2.* DACSAN.INP DACSAN.OUT Bài 3 B3.* COSO.INP COSO.OUT Giới hạn thời gian: tất cả các chương trình chạy không quá 1 giây. Bài 1: (7,0 điểm) XẾP HÀNG Trong giờ học thể dục, thầy giáo xếp n học sinh của lớp thành một hàng và vị trí của các học sinh được đánh số từ 1 đến n từ trái sang phải. Ban đầu các học sinh đứng tùy ý trong hàng. Tuy nhiên, để tôn trọng các bạn nữ, thầy muốn các bạn nam không được đứng liền trước bạn nữ nào (đứng liền trước ở đây được hiểu rằng vị trí của các bạn nam là i và vị trí của các bạn nữ là i+1). Để thực hiện quy định này, thầy bắt đầu đi từ đầu hàng đến cuối hàng, khi gặp bạn nam nào đó đứng liền trước một bạn nữ, thầy sẽ yêu cầu bạn nam này đổi chỗ cho bạn nữ rồi đi tiếp đến các bạn sau đó. Chú ý rằng trong một lượt sắp xếp, thầy chỉ đi theo một chiều và mỗi bạn nam sẽ chỉ được đổi chỗ một lần. Tất nhiên là chỉ đi theo một chiều và mỗi bạn nam chỉ được đổi chỗ một lần. Tất nhiên là chỉ lượt sắp xếp như vậy thì vẫn có thể có nhiều vị trí mà bạn nam đứng trước nữ xuất hiện thêm nên cần phải làm đi làm lại thao tác sắp xếp này nhiều lần. Yêu cầu: Cho hai số nguyên dương n,t với 0A[JJ] Then begin t:= a[ii]; a[ii]:=a[jj]; a[jj]:=t; end; end; PROCEDURE xly; VAR W, X, Y, Z, i:BYTE; BEGIN S:=0; X:=A[1] MOD 3; Y:= A[2] MOD 3; Z:=A[3] MOD 3; W:=X+Y+Z; S:=A[1] DIV 3 + A[2] DIV 3 + A[3] DIV 3; IF W=6 THEN S:= S+2 ; IF ((X =1) AND (Y =1) AND (Z=1)) OR (W=4) OR (W=5) THEN S:=S+1; END; PROCEDURE output; var i:longint; BEGIN assign(f,fo); rewrite(f); write(f, s); close(f); END; BEGIN doc; { SAPXEP; } xly; output; END. BÀI 3. CƠ SỐ. CONST fi='coso.txt'; fo='coso.out'; VAR n,dd:int64; f:TEXT; kt:BOOLEAN; PROCEDURE doc; BEGIN assign(f,fi); reset(f); read(f,n); close(F); END; FUNCTION mu(y:BYTE):int64; VAR ii:BYTE; BEGIN mu:=1; IF y>=1 THEN FOR ii:=1 TO y DO mu:=mu*10; END; PROCEDURE xuly; VAR i,k:int64; j,a,x:BYTE; s:STRING; BEGIN i:=trunc(sqrt(n)); REPEAT str(i,s); k:=0; FOR j:=1 TO length(s) DO BEGIN val(s[j],a,x); k:=k+a*(mu(length(s)-j)+1); END; IF i*k=n THEN BEGIN kt:=TRUE; dd:=i; END; dec(i); UNTIL(trunc(sqrt(n))-i>81)OR(i=0); END; PROCEDURE output; BEGIN assign(f,fo); rewrite(f); IF kt=TRUE THEN write(f,dd) ELSE write(f,-1); close(f); END; BEGIN doc; kt:=FALSE; xuly; output; END.
- Xem thêm -

Tài liệu liên quan