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 -