Dữ liệu ra: Ghi ra file văn bản SAPXAU.OUT, theo cấu trỳc: - Dũng 1: Ghi cỏc từ của xõu ký tự sau khi được sắp xếp.. Hai số được ghi cỏch nhau ớt nhất một dấu cỏch.. Cỏc số được ghi cỏch
Trang 1Sở Gd&Đt kỳ thi CHọN học sinh giỏi cấp tỉnh lớp 12 thpt Quảng bình năm học 2012 - 2013
Môn thi: tin học - Vòng I
Đề thi chính thức (Khóa thi ngày 11 tháng 10 năm 2012)
Số Báo Danh: Thời gian làm bài: 180 phút (không kể thời gian giao đề)
ĐỀ RA
Sử dụng ngụn ngữ lập trỡnh Turbo Pascal để lập trỡnh giải cỏc bài toỏn sau:
Người ta định nghĩa: Từ là một nhúm ký tự đứng liền nhau.
Cho một xõu St gồm cỏc ký tự lấy từ tập ‘a’ ‘z’ và dấu cỏch Xõu khụng quỏ 20 từ, mỗi từ dài khụng quỏ 10 ký tự.
Yờu cầu: Sắp xếp cỏc từ của xõu ký tự theo thứ tự khụng giảm của độ dài cỏc từ
trong xõu St.
Dữ liệu vào: Cho trong file văn bản SAPXAU.INP, cú cấu trỳc:
- Dũng 1: Ghi một xõu ký tự St (cú ớt nhất 1 từ)
Dữ liệu ra: Ghi ra file văn bản SAPXAU.OUT, theo cấu trỳc:
- Dũng 1: Ghi cỏc từ của xõu ký tự sau khi được sắp xếp Cỏc từ được ghi cỏch
nhau đỳng một dấu cỏch.
Vớ dụ:
acb abcde abcd abc acb abc abcd abcde
Cho dóy số nguyờn dương gồm N phần tử A1, A2,…, An
Yờu cầu: Hóy liệt kờ tất cả cỏc dóy con gồm cỏc phần tử đứng liờn tiếp của dóy
trờn sao cho tổng giỏ trị cỏc phần tử của dóy con đú bằng M.
Dữ liệu vào: Cho trong file văn bản DAYCON.INP, cú cấu trỳc như sau:
- Dũng 1: Ghi 2 số nguyờn dương N và M Hai số được ghi cỏch nhau ớt nhất
một dấu cỏch (1 N 1000; 1 M 32000)
- Dũng 2: Ghi N số nguyờn dương Ai Cỏc số được ghi cỏch nhau ớt nhất một dấu cỏch (1 Ai 10000 )
Dữ liệu ra: Ghi ra file văn bản DAYCON.OUT, gồm nhiều dũng Mỗi dũng ghi
một dóy con tỡm được Cỏc dóy con được ghi theo thứ tự xuất hiện của nú trờn dóy ban đầu Cỏc số trờn cựng một dũng được ghi cỏch nhau ớt nhất một dấu cỏch.
Nếu khụng tỡm được dóy con thỏa món điều kiện thỡ ghi ra file một số: 0.
Vớ dụ:
11 6
1 4 3 1 2 1 6 5 1 4 1
3 1 2 6
5 1
1 4 1
5 6
1 2 5 2 1
0
≤≤≤≤
≤≤
Trang 2Trong một Hội trại hè do Tỉnh Đoàn tổ chức, có N học sinh tham gia, trong
đó, có một số học sinh quen nhau Một số học sinh được gọi là cùng 1 nhóm bạn, nếu bất kì một học sinh nào thuộc nhóm đều có quen ít nhất 1 học sinh khác trong cùng nhóm đó.
Yêu cầu: Hãy đếm xem có bao nhiêu nhóm bạn trong N học sinh tham gia Hội trại.
Dữ liệu vào: Cho trong file văn bản NHOMBAN.INP, có cấu trúc như sau:
- Dòng 1: Ghi số nguyên dương N, là số lượng học sinh tham gia Hội trại
(1 ≤ N ≤ 100).
- Trong N dòng tiếp theo: Mỗi dòng ghi N số nguyên dương a[i,j] với ý nghĩa:
a[i,j] = 1 nếu học sinh i quen học sinh j (với i ≠j).
a[i,j] = 0 nếu học sinh i không quen học sinh j (với i ≠j)
a[i,i] = 1 (học sinh i được xem là quen bản thân nó).
Các số trên cùng một dòng được ghi cách nhau ít nhất một dấu cách
Dữ liệu ra: Ghi ra file văn bản NHOMBAN.OUT, theo cấu trúc như sau:
- Dòng 1: Ghi số nguyên dương K, là số lượng nhóm bạn tìm được trong N học
sinh tham gia Hội trại.
Ví dụ:
NHOMBAN.INP NHOMBAN.OUT 5
1 0 0 1 1
0 1 1 0 0
0 1 1 0 0
1 0 0 1 1
1 0 0 1 1
2
==HẾT==
Trang 3Së GD&§T kú thi CHäN häc sinh giái cÊp tØnh líp 12 THPT Qu¶ng b×nh n¨m häc 2012 - 2013
M«n thi: tin häc - Vßng i
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.
- 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 câu có 3 điểm thì giám khảo phải tạo 6 bộ test.
- Với mỗi câu, giám khảo phải tạo được ít nhất một bộ test có không gian dữ liệu lớn.
- Riêng Câu 1, thứ tự sắp xếp của HS có thể khác với đáp án Nếu kết quả của học sinh khác đáp án nhưng vẫn đúng thì giám khảo vẫn cho điểm tối đa.
II Chương trình gợi ý:
Câu 1: (3,0 điểm) Sắp xếp xâu
program sap;
const f1='sapxau.inp';
f2='sapxau.out';
type mm=array[1 20] of string;
var a:mm;
s,st,tg:string;
d:integer;
f:text;
procedure doc;
begin
assign(f,f1);
reset(f);
readln(f,s);
close(f);
end;
procedure xl;
var x,j,i:integer;
n:byte;
begin
n:=length(s);
while s[1]=' ' do delete(s,1,1);
while s[n]=' ' do delete(s,n,1);
x:=pos(' ',s);
while x>0 do
begin
delete(s,x,1);
x:=pos(' ',s);
end;
s:=s+' ';
for i:=1 to 20 do a[i]:='';
i:=0;
while s<>'' do
begin
i:=i+1;
a[i]:=copy(s,1,pos(' ',s)-1);
delete(s,1,pos(' ',s));
end;
d:=i;
{ for j:=1 to d do
begin
Trang 4i:=1;st:='';
while (s[i]<>' ')do
begin
st:=st+s[i];
i:=i+1;
end;
delete(s,1,i);
a[j]:=a[j]+st;
end;}
for i:=1 to d-1 do
for j:=i+1 to d do
if length(a[i])>length(a[j]) then
begin
tg:=a[i];a[i]:=a[j];a[j]:=tg;
end;
end;
procedure xuat;
var i:integer;
begin
assign(f,f2);
rewrite(f);
for i:=1 to d do write(f,a[i],' ');
close(f);
end;
begin
doc;xl;xuat;
end
Câu 2: (3,5 điểm) Dãy con liên tiếp
program day_con;
const fi='daycon.inp';
f0='daycon.out';
type mm=array[1 10000] of integer;
var f:text;
a:mm;
n,m:integer;
procedure doc;
var i:integer ;
begin
assign(f,fi);
reset(f);
read(f,n,m);
for i:=1 to n do read(f,a[i]);
close(f);
end;
procedure xuli;
var i,j,l:integer;
t:longint;
kt:boolean;
begin
assign(f,f0);
rewrite(f);
kt:=false;
for i:=1 to n do
begin
j:=i;
t:=0;
while (t<m )and (j<=n) do
begin
t:=t+a[j];
j:=j+1;
end;
if t=m then
Trang 5begin
kt:=true;
for l:=i to j-1 do write(f,a[l],' ');
writeln(f);
end;
end;
if kt=false then write(f,0);
close(f);
end;
begin
doc; xuli;
end
Câu 3: (3,5 điểm) Đếm nhóm bạn trong Hội trại
const fi='nhomban.inp';
fo='nhomban.out';
maxn=100;
type mhc=array[1 maxn,1 maxn] of byte;
mmc=array[1 maxn] of byte;
var a:mhc;
b:mmc;
n,stp:integer;
f:text;
Procedure doc;
var i,j:integer;
Begin
assign(f,fi);
reset(f);
readln(f,n);
for i:=1 to n do
begin
for j:=1 to n do read(f,a[i,j]);
readln(f);
end;
close(f);
End;
Procedure xl;
var i,j,k:integer;
Begin
for i:=1 to n do b[i]:=n+1;
stp:=0;
for k:=1 to n do
begin
if b[k]=n+1 then
begin
stp:=stp+1;
b[k]:=stp;
end;
for i:=1 to n do
begin
if b[i] = stp then
for j:=1 to n do
if (a[i,j]=1) and (b[j]=n+1) then b[j]:=stp;
end;
end;
end;
procedure xuatstp;
begin
assign(f,fo);
rewrite(f);
writeln(f,stp);
close(f);
end;
Begin
Trang 6doc; xl;
xuatstp;
End