Tải bản đầy đủ (.docx) (9 trang)

Đề thi HSG tin học tỉnh 2011

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (87.67 KB, 9 trang )

Đề thi HSG Tin học tỉnh 2011-2012
Bài 1: Thẻ nhân viên (6 điểm)
Ở công ty tin học ABC, mỗi nhân viên của công ty được cấp một thẻ nhân
viên. Mỗi thẻ nhân viên mang một số hiệu bao gồm moọt chữ cái in hoa và 7
chữ số, ví dụ “B6830907” Chữ cái in hoa này được xác định như sau:
1. Lần lượt nhân mỗi chữ số của thẻ với một trọng số.
Trọng số của chữ số đầu tiên là 8, trọng số của chữ số thứ 2 là 7, của chữ
số thứ 3 là 6, của chữ số thứ 4 là 5, của chữ số thứ 5 là 4 của chữ số thứ 6
là 3, của chữ số thứ 7 là 2,
2. Cộng tất cả các tích tìm được rồi đem chia cho 9 được một số dư.
3. Chữ cái được xác định vào số dư theo quy tắc sau:
Số dư

0

1

2

3

4

5

6

7

8


Chữ
cái

A

B

C

D

E

F

G

H

I

Ví dụ: Với số 6830907 ta có: 6 x 8 + 8 x 7 + 3 x 6 + 0 x 5 + 9 x 4 + 0 x
3 + 7 x 2 = 48 + 56 + 18 + 0 + 36 + 0 + 14 = 172, đem 172 chia cho 9 được dư
là 1. Số 1 ứng với chữ cái B. Vậy thẻ nhân viên mà có số hiệu là “B6830907”.
Yêu cấu: Cho phần số của thẻ nhân viên, hãy tìm chữ cái tương ứng của thẻ.
Dữ liệu vào: Cho trong file van bản THENV.INP bao gồm:
Dòng 1, ghi một số nguyên N ( 1<=N<=1000) là số lượng thẻ nhân viên.
N dòng tiếp theo, mỗi dòng ghi phần số của một thẻ nhân viên.
Dữ liệu ra: Đưa ra file văn bản THENV.OUT. Mỗi dòng của file chứ một chữ
cái in hoa là phần chữ của thẻ nhân viên tương ứng.

Ví dụ:
THENV.INP

THENV.OUT


2

B

6830907

E

0753124
Bài 2:

Ngun tố ghép ( 7 điểm)

Dãy A là dãy tăng dần các số nguyên tố: 2, 3,
5,7, 11, 13,. . ., lập dãy B bằng cách ghép từng cặp số
liền kề của dãy A với nhau, cụ thể: 23, 57, 1113, . . .,
dãy C nhận được từ dãy B bằng cách loại đi các số
không là số nguyên tố.
Yêu cầu: Lập chương trình tìm M số hạng đầu tiên
của dãy C.
Dữ liệu vào: Nhập M (M <= 50) từ file NTGHEP.INP
Dữ liệu ra: Ghi ra tệp NTGHEP.OUT. mỗi dòng một
số hạng của dãy C theo thứ tự tăng dần.
Ví dụ:

NTGHEP.INP NTGHEP.OUT
2
23
3137

Bài 3:

Hộ đê ( 7 điểm)

Trong cơn bão số 6 năm 2007, Bộ quốc phịng có huy động N đồng chí
bộ đội đi cứu hộ đê, đồng chí thứ I có chiều cao là hi ( 1<=i<=N). Chọn nhiều
nhất các cặp bộ đội đi đất đắp đê( mỗi người chỉ được ghép vào một cặp), mỗi
cặp có độ chêng lếc chiều cao là dj ( 1<=j<=N div 2, dj >0). Để thuận lợi cho
việc gánh đất thì độ chêng lệch chiều cao của mỗi cặp càng nhỏ càng tốt.
Yêu cầu: Hãy đưa ra cách chọn để tổng độ chênh lệch chiều cao của tất cả các
cặp là nhỏ nhất. Nếu N lẻ thì khơng tính chiều cao của người còn lại.
Dữ liệu vào: Cho từ tệp văn bản HODE.INP có cấu trúc:
Dịng 1, chứa duy nhất một số nguyên N (1<=N<=15000)


N dòng tiếp theo, mối dòng chứa một số nguyên dương hi (1<=i<=N) là
chiều cao của đồng chí thứ i.
Dữ liệu ra: Ghi ra tệp HODE.OUT chứa duy nhất một số là tổng độ chêng lệch
chiều cao theo yêu cầu.
Ví dụ:
HODE.INP
6
170
168
167

175
176
180

Đáp án
var f1,f2:text;
i,n,x,t,du,a:longint;

begin
assign(f1,'thenv.inp');reset(f1);
assign(f2,'thenv.out');rewrite(f2);
readln(f1,n);
for i:=1 to n do
begin

HODE.OUT
10


readln(f1,x);
a:=2;t:=0;
while x<>0 do
begin
du:=x mod 10;
t:=t+du*a;
inc(a);
x:=x div 10;
end;
du:=t mod 9;
writeln(f2,chr(65+du));

end;
close(f1);close(f2);
end.
const cs = 500000;
var f1,f2:text;
n:longint;
a:array[1..cs] of longint;

function nt(x:int64):boolean;
var i:int64;
begin
i:=5;
if x < 2 then exit(false);
if x >= 4 then
if ( x mod 2 = 0) or ( x mod 3 = 0) then exit(false)
else


while ( i <= trunc(sqrt(x)) ) do
if ( x mod i = 0 ) or ( x mod (i+2) = 0 ) then exit(false)
else inc(i,6);
exit(true);
end;
function sum(a,b:longint):string;
var c,d:string;
begin
str(a,c);
str(b,d);
exit( c + d);
end;


procedure solve;
var i,j:longint;
s:int64;
begin
for i:=1 to cs do a[i]:=1;
a[1]:=0;

for i:=2 to trunc(sqrt(cs)) do
if a[i] = 1 then
begin
j:=i*2;
while j <= cs do
begin
a[j]:=0;


j:= j + i;
end;
end;
j:=0;
for i:=1 to cs do
if a[i] = 1 then
begin
inc(j);
a[j]:=i;
end;
i:=1;
s:=0;
j:=0;

while j < n do
begin
val(sum(a[i],a[i+1]),s);
if nt(s) then
begin
writeln(f2,a[i],a[i+1]);
j:=j+1;
end;
i:=i+2;
end;

end;
begin
assign(f1,'ntghep.inp'); reset(f1);


assign(f2,'ntghep.out'); rewrite(f2);
read(f1,n);
solve;

close(f1); close(f2);
end.
var f1,f2:text;i,j,n,k,tong:longint;
a,b:array[1..100000] of longint;

procedure qs(l,r:longint);
var dau,giua,cuoi,t:longint;
begin
dau:=l;cuoi:=r;
giua:=a[(dau+cuoi) div 2];

while dau<=cuoi do
begin
while a[dau]while a[cuoi]>giua do dec(cuoi);
if dau<=cuoi then
begin
t:=a[dau];
a[dau]:=a[cuoi];
a[cuoi]:=t;
inc(dau);
dec(cuoi);
end;
end;


if dauif lend;

begin
assign(f1,'hode.inp');
reset(f1);
assign(f2,'hode.out');
rewrite(f2);
readln(f1,n);
for i:= 1 to n do
begin
readln(f1,a[i]);
end;
qs(1,n); tong:=0;

if n mod 2=0 then
for i:= 1 to n div 2 do
tong:=tong+a[2*i]-a[2*i-1]
else
begin
tong:=maxlongint;
for i:=0 to n div 2 do
begin
k:=0;
for j:=1 to n do
if jb[j]:=a[j]


else b[j]:=a[j+1];
for j:= 1 to n div 2 do
k:=k+b[2*j]-b[2*j-1];
if kend;
end;
write(f2,tong);
close(f1);close(f2);
end.