Dòng đợc đánh số từ 1 đến M từ trên xuống dới.. Cột đợc đánh số từ 1 đến N từ trái qua phải.. Mỗi phần tử của ma trận có giá trị nguyên.. Hãy tính tổng giá trị các phần tử có chỉ số dòng
Trang 1Sở giáo dục và đào tạo Kỳ thi chọn hSG lớp 11 quảng bình Năm học 2005-2006
Thời gian: 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:
Câu 1: (2.5 điểm) Tổng giá trị các phần tử trong một ma trận - SUM.PAS
Cho một ma trận A gồm M dòng N cột Dòng đợc đánh số từ 1 đến M từ trên xuống dới Cột đợc đánh số từ 1 đến N từ trái qua phải Mỗi phần tử của ma trận có giá trị nguyên Hãy tính tổng giá trị các phần tử có chỉ số dòng chẵn và chỉ số cột lẽ.
Dữ liệu vào: Cho trong file SUM.INP có cấu trúc nh sau:
-Dòng 1: Ghi hai giá trị M N, là số dòng và số cột của ma trận, các số ghi cách nhau một dấu cách (2<=M, N<=100)
-M dòng tiếp theo: mỗi dòng ghi N số nguyên x, là các giá trị của các phần tử
trên một dòng của ma trận, các số ghi cách nhau một dấu cách.
(-1000 <=x<=1000)
Dữ liệu ra: Ghi ra file SUM.OUT theo cấu trúc nh sau:
-Dòng 1: Ghi một số S, là tổng tìm đợc.
Ví dụ:
2 4 1 5 7
2 2 8 3 5
1 7 4 8 0
9 6 4 7 3
Câu 2: (3.5 điểm) Số nguyên tố – NT.PAS NT.PAS
Tìm tất cả các số tự nhiên X có ba chữ số sao cho khi đảo ngợc trật tự các chữ số của X ta sẽ thu đợc một số nguyên Y mà X và Y là hai số nguyên tố cùng nhau.
Dữ liệu ra: Ghi ra file NT.OUT theo cấu trúc nh sau:
-Dòng 1: Ghi số nguyên dơng N, là số lợng số X tìm đợc.
-Dòng 2: Ghi N số tìm đợc Các số ghi cách nhau một dấu cách.
Câu 3: (4.0 điểm) Sắp xếp xâu – NT.PAS STR.PAS
Cho một xâu mẫu S gồm N ký tự đợc lấy từ tập các ký tự ‘A’ ‘Z’ Với một cặp số nguyên (i,j) (1<=i,j<=N), ta tạo ra một xâu thứ cấp S’ bằng cách đổi chỗ phần tử thứ i với phần tử thứ j của xâu mẫu S Với M cặp số (i,j) ta sẽ thu
đ-ợc M xâu thứ cấp.
Yêu cầu: Sắp xếp các xâu thứ cấp tăng dần theo thứ tự từ điển.
Dữ liệu vào: Cho trong file STR.INP có cấu trúc nh sau:
-Dòng 1: Ghi giá trị N, là số ký tự của xâu S (1<=N<=500)
-Dòng 2: Ghi xâu mẫu S.
Trang 2-Dòng 3: Ghi giá trị M, là số lợng các cặp số (i, j) (1<=M<=500)
-M dòng tiếp theo: mỗi dòng ghi một cặp số i j lần lợt là chỉ số của phần tử thứ
i và chỉ số của phần tử thứ j cần đổi chỗ của xâu S Hai số ghi cách nhau một dấu cách.
Dữ liệu ra: Ghi ra file STR.OUT theo cấu trúc nh sau:
-M dòng: Mỗi dòng ghi một xâu thứ cấp, các dòng đợc sắp tăng dần theo thứ tự
từ điển.
Ví dụ:
2 4
1 5
3 3
Hớng dẫn chấm thi học sinh giỏi toàn tỉnh
lớp 11 năm học 2005-2006
I/ Ph ơng pháp chung
- Giám khảo tạo các 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 mẫu để tính kết quả của dữ liệu vào: SUM.PAS NT.PAS STR.PAS
- Chơng trình học sinh chạy đúng mỗi bộ test, giám khảo cho 0.5 điểm Nh vậy, nếu câu hỏi có 3 điểm thì giám khảo phải tạo đợc 6 bộ test.
- Nếu chơng trình chạy sai test nào thì giám khảo cho 0 điểm đối với test đó
- Giám khảo có thể sử dụng các test gợi ý dới đây nếu cần thiết.
II/ Ch ơng trình mẫu
SUM.PAS
{$r+}
const fi='Sum.in2';
fo='sum.ou2';
nn=100;mm=100;
type mhci=array[1 mm,1 nn] of integer;
var a:mhci;
m,n:byte;
s:longint;
Trang 3procedure doc;
var f:text; i,j:byte;
begin
assign(f,fi);reset(f);
readln(f,m,n);
for i:=1 to m do
begin
for j:=1 to n do read(f,a[i,j]);
readln(f);
end;
close(f);
end;
procedure xl;
var i,j:byte;
begin
s:=0;
for i:=1 to m do
begin
for j:=1 to n do
if (i mod 2=0) and (j mod 2=1) then s:=s+a[i,j]; end;
end;
procedure xuat;
var i,j:byte; f:text;
begin
assign(f,fo); rewrite(f);
writeln(f,s);
close(f);
end;
begin
doc;
xl;
xuat;
readln;
end.
NT.PAS
const fo='NT.OUT';
nn=901;
type mmcw=array[0 901] of word;
var n:word; s:mmcw;
function uscln(a,b:word):word;
var r:word;
begin
while b>0 do
begin r:=a mod b; a:=b; b:=r; end; uscln:=a;
end;
function dao(x:word):word;
var y:word;
begin
y:=0;
while x>0 do
begin y:=10*y+(x mod 10); x:=x div 10; end; dao:=y;
end;
function tim:word;
Trang 4var x,d:word;
begin
d:=0;
for x:=100 to 999 do
if uscln(x,dao(x))=1 then
begin d:=d+1; s[d]:=x; end; tim:=d;
end;
procedure xuat;
var f:text; i:word;
begin
n:=tim;
assign(f,fo);rewrite(f);
writeln(f,n);
for i:=1 to n do write(f,s[i],' ');
close(f);
end;
begin xuat; end.
STR.PAS
{$r+}
program sap_xau;
const fi='str.in5'; fo='str.ou5';
type mmcc=array[1 500] of char;
mmci=array[1 500] of integer;
var d,s,b,c,tg1:mmcc;
l,r:mmci;
n,m:integer;
f:text;
procedure nhap;
var i,j:integer;
begin
assign(f,fi); reset(f);
readln(f,n);
for i:=1 to n do read(f,s[i]);
readln(f);
readln(f,m);
for i:=1 to m do readln(f,l[i],r[i]);
close(f);
end;
procedure doicho(var x,y:char);
var tg:char;
begin
tg:=x; x:=y; y:=tg;
end;
procedure xl;
var i,j,k,tg:integer;
begin
for i:=1 to m-1 do
begin
b:=s;
doicho(b[l[i]],b[r[i]]);
for j:=i+1 to m do
begin
c:=s;
doicho(c[l[j]],c[r[j]]);
for k:=1 to n do
Trang 5begin
if b[k]>c[k] then
begin
tg:=l[i];l[i]:=l[j];l[j]:=tg; tg:=r[i];r[i]:=r[j];r[j]:=tg; tg1:=b;b:=c;c:=tg1;
break;
end;
if b[k]<c[k] then break;
end;
end;
end;
assign(f,fo); rewrite(f);
for i:=1 to m do
begin
d:=s;
doicho(d[l[i]],d[r[i]]);
for j:=1 to n do write(f,d[j]);
writeln(f);
end;
close(f);
end;
begin
nhap; xl;
end.
III/ Mét sè test gîi ý.
5 5
2 4 1 5 7
2 2 8 3 5
1 7 4 8 0
9 6 4 7 3
8 5 3 2 7
31
6 5
2 4 1 5 7
2 2 8 3 5
1 7 4 8 0
9 6 4 7 3
8 5 3 2 7
3 -1 -2 -3 -4
28
9
ABCDEFGKK
5
5 7
7 6
4 5
8 6
7 5
ABCDEGFKK ABCDEKGFK ABCDGFEKK ABCDGFEKK ABCEDFGKK
14
ABCDEFGKKKHJHB
5
4 7
3 9
8 10
7 2
3 7
ABCDEFGKKKHJHB ABCGEFDKKKHJHB ABGDEFCKKKHJHB ABKDEFGKCKHJHB AGCDEFBKKKHJHB
Trang 6ABCDEFGKJNKKKHJHB
6
1 1
14 1
9 2
1 7
11 4
7 11
ABCDEFGKJNKKKHJHB ABCDEFKKJNGKKHJHB ABCKEFGKJNDKKHJHB AJCDEFGKBNKKKHJHB GBCDEFAKJNKKKHJHB HBCDEFGKJNKKKAJHB
20
ABCDEFGKJNKKKHJKLJHB
6
9 3
11 18
11 5
6 9
8 4
1 16
ABCDEFGKJNJKKHJKLKHB ABCDEJGKFNKKKHJKLJHB ABCDKFGKJNEKKHJKLJHB ABCKEFGDJNKKKHJKLJHB ABJDEFGKCNKKKHJKLJHB KBCDEFGKJNKKKHJALJHB
Tµi liÖu tham kh¶o:
Ng«n ng÷ lËp tr×nh Pascal-Qu¸ch TuÊn Ngäc
Bµi tËp lËp tr×nh Pascal-KiÒu V¨n Hng