Dữ liệu cho trong file văn bản với tên là CHUSO.INP trong đó dòng đầu chứa số a0,dòng thứ hai chứa hai số N và M.. Kết quả ghi ra trong file QUANGCAO.OUT trong đó: Dòng đầu là số bóng
Trang 1Năm học 2002-2003
Bài 1: CHỮ SỐ tên file chương trình CHUSO.PAS
Xét dãy số tự nhiên {an} đuợc xây dựng theo quy tắc sau:
Cho trước số a0 là một số tự nhiên có tối đa 10 chữ số
Số ai (i>0) là một số tự nhiên nhận được từ ai-1 bằng cách viết thêm vào saucác chữ số của ai-1 chính ai-1 nhưng viết theo thứ tự ngược lại
Ví dụ:
Với a0 = 123 thì a1 = 123321, a2 = 123321123321, a3 = 123321123321123321123321Với hai số N và M cho trước, hãy tìm chữ số thứ M trong aN
Dữ liệu cho trong file văn bản với tên là CHUSO.INP trong đó dòng đầu chứa số a0,dòng thứ hai chứa hai số N và M
Kết quả ghi ra file văn bản với tên là CHUSO.OUT Trong trường hợp có lời giải, filenày sẽ chứa số tìm được, ngược lại file này chứa số -1
Trước tiên ta nhận xét mặc dù đề bài cho a0 là số tự nhiên, nhưng vì bài toán không
sử dụng tính chất của số nên ta có thể xem a0 như một xâu ký tự
Gọi L là số ký tự của a0, ta thấy a0 có L ký tự, a1 có 2L ký tự, a2 có 4L ký tự, , a N có
2 N L ký tự
Ký hiệu sR là chuỗi ký tự đảo ngược của chuỗi s Ví dụ: nếu s="abca" thì sR ="acba",các chữ cái được viết theo thứ tự ngược lại Để ý là với hai chuỗi a, b bất kỳ ta có(ab)R=bRaR Theo đề bài, ta có a1 = a0a0R, a2=a1a1R=a0a0R(a0a0R)R=a0a0Ra0a0R, , a N =
a 0 a 0 R a 0 a 0 R a 0 a 0 R, nghĩa là xâu aN sẽ ghép thành từ các xâu a0 và a0Rxen kẽ nhau
Từ nhận xét này ta có thuật toán sau:
Nếu vị trí M nằm ngoài xâu ký tự aN, hay nói cách khác nếu M < 1 hoặc M > 2NL thì in
ra -1 Đoạn lệnh sau đây thể hiện điều này:
i:=(m-1) mod l+1; {i là vị trí tương ứng với vị trí M trong chuỗi a0}
if ((m-1) div l) mod 2=1 then i:=l-i+1; {nếu vị trí M thuộc xâu đảo ngược a 0 thì
ta đảo ngược vị trí i}
timchuso:=ord(a0[i])-ord('0'); {kết quả bằng chữ số a0[i]}
CHUSO.OUT1
Trang 2Bài 2: TÍNH DIỆN TÍCH tên file chương trình HCN.PAS
Trên mặt phẳng tọa độ cho N (N 10 000) hình chữ nhật với các cạnh song songvới các trục tọa độ Các hình chữ nhật được đánh số từ 1 tới N Hình chữ nhật thứ iđược cho bởi toạ độ đỉnh trái dưới (xi1 , yi1) và tọa độ đỉnh phải trên (xi2, yi2) Các số xi1 , yi1, xi2, yi2 là các số nguyên trong phạm vi từ -100 đến 100
Hãy lập trình tính:
1 Diện tích của phần mặt phẳng mà N hình chữ nhật này phủ
2 Tính diện tích phần chung của N hình chữ nhật này
Dữ liệu cho trong file HCN.INP trong đó dòng đầu chứa số N Dòng thứ i trong Ndòng tiếp theo chứa 4 số số xi1 , yi1, xi2, yi2.
Kết quả ghi ra file HCN.OUT gồm 2 dòng, trong đó dòng đầu chứa số S1 là kết quảcủa câu 1 Dòng thứ hai chứa số S2 là kết quả của câu 2
Trang 31
Trang 4Bài 3: BẢNG QUẢNG CÁO Tên file chương trình QUANGCAO.PAS
Trên quảng trường trung tâm của thủ đô Rome có một bảng quảng cáo hìnhchữ nhật gồm N x M ô vuông Mỗi ô có một bóng đèn, mỗi bóng đèn có hai trạng tháitắt hoặc sáng Ứng với mỗi dòng cũng như mỗi cột có một công tắc Khi tác độngđến một công tắc nào đó tất cả các bóng đèn trên dòng hoặc cột tương ứng sẽ đổisang trạng thái ngược lại (đang sáng thành tắc, đang tắc được bật sáng) Để mừngđội nhà thắng trận trong trận cầu chiều qua người phụ trách bảng quảng cáo muốnbảng có được nhiều bóng đèn sáng nhất.Với trạng thái bảng quảng cáo hiện thờicho trước, người phụ trách nhờ bạn lập trình tìm một phương án tác động lên cáccông tắc để nhận được trạng thái bảng quảng cáo mong muốn Bạn hãy giúp nhàphụ trách thực hiện điều đó
Dữ liệu cho trong file văn bản với tên là QUANGCAO.INP trong đó:
Dòng đầu chứa hai số N và M (: 1 N 10, 1 M 100)
Dòng thứ i trong N dòng tiếp theo chứa M số 0 hoặc 1 Số thứ j cho biết trạngthái của bóng đèn thứ j trên dòng thứ i của bảng (1 tương ứng với bóng đènsáng, 0 tương ứng với bóng đèn tắt)
Kết quả ghi ra trong file QUANGCAO.OUT trong đó:
Dòng đầu là số bóng đèn sáng trên bảng tìm được
Dòng thứ hai chứa S là số lần bạn tác động lên các công tắc
S dòng tiếp theo lần lượt ghi ra S công tắc theo trình tự cần bật Dòng thứ jtrong S dòng này chứa một xâu độ dài không quá 4, ký tự đầu là ‘D’ hoặc ‘C’tương ứng với tác động thứ i là lên dòng hay cột Phần còn lại của xâu là chỉ
số của dòng hay cột tương ứng
Lời giải:
Trước hết ta đưa ra hai nhận xét:
Mỗi công tắc chỉ cần được tác động nhiều nhất một lần: thật vậy, tác
động một công tắc 2 lần sẽ cho kết quả giống như khi không tác động lêncông tắc
Thứ tự tác động lên các công tắc là không quan trọng Nói cách khác, tác
động một dãy công tắc theo trình tự nào cũng mang lại kết quả như nhau
Từ hai nhận xét trên, ta thấy mỗi công tắc sẽ có hai khả năng: tác động hoặc khôngtác động Có tất cả M+N công tắc, vậy số khả năng là 2M+N Theo giới hạn đề bài ra,con số này có thể rất lớn Tuy nhiên để tìm số bóng đèn sáng nhiều nhất, ta chỉ cầnduyệt qua 2N ≤ 210 = 1024 khả năng tác động lên các công tắc trên các hàng củabảng Với mỗi khả năng này, đối với mỗi cột ta khẳng định được ngay có cần phảitác động lên công tắc của cột đó hay không: nếu tác động lên công tắc cột mà số
Trang 5đèn sáng trên cột đó nhiều hơn thì ta sẽ tác động Đoạn lệnh sau đây thể hiện điềunày Chú ý trong chương trình dưới đây, ta đánh số cột, hàng bắt đầu từ 0.
for j:=0 to m-1 do begin
dem:=0; {đếm số đèn sáng trên cột j}
for i:=0 to n-1 do
if (b[i,j]=1) then inc(dem);
if (dem<n-dem) then {tác động lên công tắc sẽ cho n-dem bóng đèn sáng}
begin {nếu tác động lên công tắc có lợi hơn:}
Trong 2N khả năng này, ta sẽ chọn ra khả năng cho số bóng đèn sáng nhiều nhất
Về cài đặt chương trình, chú ý sử dụng kỹ thuật xử lý bit khi duyệt qua 2N khả năngtác động lên các công tắc trên hàng Dùng kỹ thuật này, chương trình sẽ được viếtnhanh và gọn hơn Câu lệnh sau đây thực hiện điều này:
for s:=0 to (1 shl n)-1 do {biến s là một dãy N bit thể hiện một khả năng}
Do ta muốn có một dãy N bit đến biến s sẽ chạy từ 0 đến 2N - 1
Để kiểm tra trong khả năng s, một công tắc nào đó có được tác động hay không tadùng thủ tục kiểm tra một bit có được bật hay không:
function bitbat(s, i: longint): boolean;
hang, luuhang: array[0 MAXN-1] of boolean;
cot, luucot: array[0 MAXM-1] of boolean;
Trang 6function bitbat(s, i: longint): boolean;
function sodensang(var a: bang): longint;
var i,j,dem: longint;
if (bitbat(s,i)) then begin
bathang(b,i); inc(t); hang[i]:=true;
end;
for j:=0 to m-1 do begin
dem:=0;
for i:=0 to n-1 do
if (b[i,j]=1) then inc(dem);
if (dem<n-dem) then begin batcot(b,j); inc(t); cot[j]:=true; end; end;
Trang 7Bài 1: TỔNG LỚN NHẤT tên chương trình: SUM.PAS
Cho một bảng A gồm N x N số nguyên (N 100), các dòng được đánh số trênxuống dưới bắt đầu từ 1, các cột được đánh số từ trái qua phải cũng bắt đầu từ 1.Mỗi số trong bảng có giá trị tuyệt đối không vượt quá 10000 Đường chéo chính củabảng là đường thẳng nối hai ô (1,1) và (N,N) Như vậy trên bảng có 2N-1 đuờngchéo song song với đường chéo chính
Bài toán: Hãy tìm đường chéo song song với đường chéo chính có tổng các phần tửtrên đường chéo đó là lớn nhất
Dữ liệu vào cho trong file văn bản SUM.INP trong đó:
Trang 81 Ký hiệu giá trị này là T Với mỗi giá trị T, ta duyệt qua các cột trên đường chéotương ứng Nếu T≥0 (tương ứng với các đường chéo ở nửa dưới của bảng) thì cộtbắt đầu là 1 còn nếu T<0 thì cột bắt đầu là 1-T
Đoạn lệnh sau thể hiện cách làm này:
Trang 9Bài 2: SẮP XẾP Tên chương trình: SORT.PAS
Cho một dãy X gồm N số nguyên trong phạm vi từ -10000 đến 10000 (1 N 100000) Hãy sắp xếp dãy số này theo thứ tự giảm dần
Dữ liệu vào cho trong file văn bản SORT.INP trong đó dòng đầu chứa số N Dòngthứ i trong N dòng tiếp theo chứa số thứ i trong dãy X
Kết quả ghi ra file văn bản với tên SORT.OUT trong đó lần lượt ghi ra các phần tửcủa dãy X đã được sắp xếp mỗi số trên một dòng
Lời giải:
Phương pháp sắp xếp mà chúng ta dùng là sắp xếp đếm (counting sort) Phương
pháp này tận dụng việc giới hạn của các số cần sắp xếp có thể lưu đủ trong bộ nhớ,trong bài toán này phạm vi các số là -10000 10000 Ta sẽ dùng mảng dem[-10000 10000] trong đó dem[x] lưu số lần xuất hiện của số x trong dãy số
Bài toán này được ra với yêu cầu làm trên trình biên dịch Borland Pascal Với trìnhbiên dịch cũ này, quản lý bộ nhớ là một điều quan trọng do dung lượng bộ nhớ bịhạn chế Chúng tôi sẽ trình bày lời giải bài toán này trên cơ sở bộ nhớ hạn chế đó
Trang 10Do mỗi số có thể xuất hiện đến N ≤ 100 000 lần nên mảng dem phải mang kiểu dữliệu longint (số nguyên 32 bit) trong Pascal Trong Borland Pascal, khi khai báo mảng
20000 phần tử longint sẽ bị báo lỗi là không đủ bộ nhớ Có một cách để giải quyếtđiều này:
Khai bảo mảng dem với kiểu dữ liệu word (có giới hạn từ 0 65535) như sau:
var dem: array[-10000 10000] of word;
Ta nhận xét chỉ có nhiều nhất một phần tử của mang dem có thể có giá trị lớn hơnhoặc bằng 60000, vì tổng số lượng số nhiều nhất là 100 000 Do đó ta quản lý thêmmột biến lưu phần tử đặc biệt có giá trị đếm vượt 60000 này (nếu có) Ta đặt tênbiến này là v Đoạn lệnh dưới đây đọc vào các số và quản lý dữ liệu:
for i:=1 to n do
begin
readln(x); {đọc vào một số x}
inc(dem[x]); {tăng biến đếm số lần xuất hiện của số x}
if (dem[x]=60000) then {nếu đã có 60000 số x xuất hiện}
begin
v:=x; {lưu lại số x duy nhất này}
dem[x]:=0; {gán lại biến đếm bằng 0 để tránh tràn số}
end;
end;
Đoạn lệnh dưới đây in ra các số đã sắp xếp theo thứ tự giảm dần:
for i:=-10000 downto 10000 do {duyệt qua phạm vi của các số: [-10000,10000]) begin
for j:=1 to dem[i] do {in ra số i với số lần là dem[i]}
writeln(i);
if (v=i) then for j:=1 to 60000 do {nếu i là số đặc biệt thì ta cần in thêm
60000 lần xuất hiện nữa}
Trang 11Bài 3: HÌNH VUÔNG tên chưong trình: SQUARE.PAS
Trên mặt phẳng cho N hình vuông với các cạnh song song với hệ trục toạ độ đượcđánh số từ 1 đến N (1N2000) Hình vuông thứ i được cho bởi toạ độ góc dướitrái (xi, yi) và toạ độ đỉnh phải trên là (zi, ti) Toạ độ của các đỉnh là các số nguyêntrong phạm vi -10000 đến 10000 Khoảng cách giữa hai hình vuông A và B đượcđịnh nghĩa là độ dài đoạn thẳng ngắn nhất trong số các đoạn thẳng mà một đầu mútthuộc hình vuông A và đầu mút kia thuộc hình vuông B
Yêu cầu: Tìm hai hình vuông xa nhau nhất trong số N hình vuông cho trước.
Dữ liệu: Vào từ file văn bản SQUARE.INP:
Dòng đầu tiên chứa số N
Dòng thứ i trong N dòng tiếp theo chứa 4 số xi, yi, zi và ti
Kết quả: Ghi ra file văn bản SQUARE.OUT trong đó chứa chỉ số của hai hình vuông
thực hiện thành nhiều công việc con Nhưng trước tiên cần nhận xét rằng, luôn tồn
tại một đoạn thẳng ngắn nhất nối giữa hai hình vuông mà có ít nhất một đầu mút là một trong các đỉnh của hai hình vuông Thật vậy, với một đoạn thẳng mà
Trang 12hai đầu mút đều không phải là đỉnh của hình vuông, ta có thể dời hai đầu mút saocho đoạn thẳng mới không dài hơn đoạn thẳng cũ và ít nhất một đầu mút sẽ trởthành đỉnh của hình vuông.
Vậy thủ tục tính khoảng cách giữa hai hình vuông sẽ được xây dựng từ trên xuốngnhư sau:
Khoảng cách giữa hai hình vuông bằng khoảng cách ngắn nhất trong số cáckhoảng cách từ một trong 8 đỉnh của hai hình vuông đến hình vuông kia
Khoảng cách từ một điểm đến một hình vuông bằng khoảng cách ngắn nhấttrong số các khoảng cách từ điểm đó đến bốn cạnh của hình vuông
Khi đã có thủ tục tính khoảng cách giữa hai hình vuông, ta chỉ cần duyệt qua tất cảcác cặp hình vuông và chọn ra cặp có khoảng cách xa nhất Do giới hạn của bàitoán là số hình vuông N ≤ 2000 nên cách làm này là khả thi, thời gian chạy là O(N2).Sau này các bạn sẽ được tiếp cận các lời giải hiệu quả hơn
x1, y1, x2, y2: array[1 MAXN] of longint;
n, luui, luuj: longint;
function min(a,b: longint): longint;
if (a<=x) and (x<=b) then kc:=0
else if (x<a) then kc:=a-x
Trang 13if (i<j) then kq:=min(kq,kc2hinh(j,i));
Trang 14Năm học 2004-2005
BÀI 1: KHOẢNG CÁCH GIỮA HAI SỐ Tên chương trình: DISTANCE.PAS
Với hai chữ số x và t, khoảng cách của chúng được định nghĩa là số nguyên không
âm nhỏ nhất d(x,y) mà khi cộng thêm d(x,y) vào một chữ số nào đó trong hai chữ sốx,y thì kết quả nhận được là một số nguyên có chữ số hàng đơn vị trùng với chữ sốcòn lại Ví dụ: d(2,5)=3 vì 2+3=5, d(5,1)=4 vì 1+4=5, còn d(1,9)=2 vì 9+2 = 11
Với hai số nguyên dương X và Y có cùng số lượng chữ số, khoảng cách d(X,Y) giữahai số X và Y là tổng khoảng cách giữa các cặp chữ số cùng hàng tương ứng
Ví dụ d(213,419)=d(2,4) + d(1,1) + d(3,9) = 2 + 0 + 4 = 6
Bài toán: Cho hai số X và Y có cùng lượng chữ số N (0 < N < 100), hãy tìm khoảng
cách d(X,Y)
Dữ liệu vào từ file văn bản DISTANCE.INP trong đó dòng đầu chứa số X; dòng thứ
hai chứa số Y thỏa mãn dàng buộc của bài toán
Kết quả ghi ra file văn bản DISTANCE.OUT trong đóchứa một số nguyên duy nhất
là kết quả d(X,Y) tìm được
for i:=0 to 9 do {duyệt qua các chữ số từ 0 đến 9}
if ((a+i) mod 10=b) or {nếu cộng thêm i vào a mà thu được b}
((b+i) mod 10=a) then {hoặc ngược lại )
Trang 15Cho một bảng A gồm N x N số nguyên (N 100), các dòng được đánh số từ trênxuống dưới bắt đầu từ 1, các cột được đánh số từ trái qua phải cũng bắt đầu từ 1.Mỗi số trong bảng có giá trị tuyệt đối không vượt quá 30000 Bảng B được tạo ra từbảng A theo qui tắc sau:
Phần tử của B nằm ở dòng I, cột j có giá trị bằng tổng của các số nằm trong ô (i,j) và các ô kề nó trong bảng A: Bij = Aij+A(i+1)j+A(i-1)j+Ai(j+1)+Ai(j-1)
Chú ý: Các phần tử nằm ngoài bảng được xem như có giá trị bằng 0.
Bài toán: Cho bảng A Hãy tạo ra bảng B tương ứng.
Dữ liệu vào cho trong file văn bản TABLE.INP trong đó :
Dòng đầu chứa số N
Dòng thứ i trong N dòng tiếp theo chứa N số nguyên lần lượt ứng với cácphần tử nằm trên dòng thứ i của bảng A
Các số trên cùng một dòng cách nhau bởi khỏang trắng
Kết quả ghi ra file văn bản TABLE.OUT cho biết bảng B tạo được có định dạng cùng
một qui cách với file input, nghĩa là:
Dòng đầu chứ số N
Dòng thứ i trong N dòng tiếp theo chứa N số nguyên lần lượt ứng với cácphần tử nằm trên dòng thứ i của bảng B
Trang 16Các số trên cùng một dòng cách nhau bởi khỏang trắng.
Ta in ra các phần tử của mảng B theo công thức như đề bài nêu:
for i:=1 to n do begin
Trang 17trong đó K là một số nguyên dương.
Phương trình này có thể có vô số nghiệm Tuy nhiên, ở đây người ta chỉ quan tâmđến các nghiệm (x,y,z) mà trong đó các số x,y,z đều là các số nguyên tố
Nhắc lại: số tự nhiên p được gọi là số nguyên tố nếu p>1 và p chỉ chia hết cho 1 vàchính nó
Bài toán: Với số K cho trước (K < 5000), hãy tìm tất cả các bộ số nguyên tố x,y,z (x
y z) là nghiệm của phương trình trên hoặc cho biết không có nghiệm thoả mãnyêu cầu bài toán
Dữ liệu vào cho trong file văn bản EQUA.INP trong đó chứa duy nhất số K
Kết quả ghi ra file văn bản EQUA.OUT chứa N + 1 dòng (N là số nghiệm tìm được),trong đó:
Dòng thứ i trong N dòng đầu tiên chứa 3 số nguyên cho biết bộ nghiệm thứ itìm được
Dòng thứ N + 1 chứa 3 số 0 cho biết điểm kết thúc file output
Các số trên cùng một dòng cách nhau bởi khoảng trắng
Ta kiểm tra các số nguyên tố từ 1 đến 5000 (giá trị lớn nhất của K) rồi lưu vào một mảng:
for i:=2 to MAXK do
if (nguyento(i)) then begin {nếu i là số nguyên tố}
inc(n);
p[n]:=i; {lưu i vào mảng p}
nt[i]:=true; {đặt lại cờ đánh dấu cho biết i là số nguyên tố} end;
Trang 18Sau đó dùng hai vòng lặp qua mảng này để duyệt qua x và y Mảng đánh dấu nt dùng để kiểmtra nhanh xem z=K-x-y có phải là số nguyên tố không:
for i:=1 to n do {i là chỉ số của số nguyên tố x trong mảng p} for j:=i to n do {j là chỉ số của số nguyên tố y trong mảng p} begin
for i:=2 to MAXK do
if (nguyento(i)) then begin
Trang 19Yêu cầu: hãy tạo mảng C gồm N+M phần tử từ tất cả các phần tử của A và B sao
cho các phần tử của C cũng có thứ tự tăng dần
Dữ liệu cho trong 2 file văn bản có tên A.INP và B.INP.
Dòng đầu của file A.INP chứa số N Mỗi dòng trong N dòng tiếp theo chứa
1 số nguyên dương ứng với các phần tử của mảng A
Dòng đầu của file B.INP chứa số M Mỗi dòng trong M dòng tiếp theo chứa
1 số nguyên dương ứng với các phần tử của mảng B
Kết quả xuất ra file văn bản C.OUT gồm N+M dòng, lần lượt chứa các phần tử của
Trang 20đã đọc đến phần tử Ai và Bj Quy tắc tăng giá trị biến chạy là như sau:
Nếu Ai ≤ Bj: in ra giá trị Ai, tăng biến chạy i, đọc giá trị mới từ mảng A Đoạn
mã sau đây thể hiện điều này:
{biến a, b chỉ phần tử đang xét A i , B j trên hai mảng}
if (a<=b) then {điều kiện A i ≤ B j }
begin
writeln(fc,a); {in ra A i như là phần tử tiếp theo của mảng C}
inc(i); {tăng biến i}
if (i<=n) then {nếu vẫn chưa đọc hết mảng A}
readln(fa,a) {đọc số mới}
else
a:=maxlongint; {nếu đã đọc hết mảng A, gán a giá trị bằng ∞ để sau này
khi so sánh, chỉ các phần tử của mảng B mới được xét} end else begin
{tương tự cho trường hợp A i > B j }
while (i<=n) or (j<=m) do begin
Trang 21Cho N hình chữ nhật (2 <N< 500) có các cạnh song song với hai trục tọa độ và tọa
độ các đỉnh đều nguyên Các hình chữ nhật được đánh số từ 1 đến N
Yêu cầu: Hãy tìm hai hình chữ nhật mà phần giao nhau của chúng có diện tích lớn
Kết quả xuất ra file văn bản HCN.OUT gồm 1 dòng duy nhất, chứa 2 số nguyên
dương cho biết chỉ số của 2 hình chữ nhật tìm được
Thủ tục sau tìm giao giữa hai đoạn thẳng (a1,b1) và (a2,b2) trên trục số:
function giaodoan(a1,b1,a2,b2:longint):longint;
begin
if (b1<=a2) or (a1>=b2) then
giaodoan:=0 {hai đoạn không giao nhau}
else
giaodoan:=min(b1,b2)-max(a1,a2); {hai đoạn giao nhau}
HCN OUT
1 2
Trang 22Sau khi có thủ tục tính diện tích phần giao giữa hai hình chữ nhật, ta xét qua tất cảcác cặp hình chữ nhật và chọn ra cặp có phần giao lớn nhất:
x1,y1,x2,y2: array[1 MAXN] of longint;
function min(a,b:longint):longint;begin if a<b then min:=a else min:=b; end;
function max(a,b:longint):longint;begin if a>b then max:=a else max:=b; end;
var n, kq, s, i, j, luui, luuj: longint;
begin
assign(input,finp);
reset(input);
Trang 23Cho 2 số nguyên dương A,B (0<A, B< 10100 ).
Yêu cầu: hãy so sánh giá trị của 2 số.
Dữ liệu cho trong file văn bản có tện SO.INP gồm 2 dòng:
Dòng đầu chứa số A
Dòng thứ 2 chứa số B
Kết quả xuất ra file văn bản SO.OUT gồm 1 dòng duy nhất, chứa số -1,0 hoặc 1 lần
lượt tương ứng với các trường hợp sau: A < B, A = B, và A > B
Thủ tục so sánh hai số A, B có thể được xây dựng như sau:
Xem A, B là xâu ký tự Nếu độ dài của hai xâu khác nhau, ta thêm chữ số 0vào đầu xâu ngắn hơn cho đến khi độ dài của hai xâu bằng nhau :
while (length(a)<length(b)) do a:='0'+a;
while (length(b)<length(a)) do b:='0'+b;