Page 156 - C:\Users\Admin\Desktop\Sach mem upweb\
P. 156
100 Problems & Solutions Trang 156
j:=x mod M1;
If i=4 then begin i:=3; j:=M1; end;
Inc(A[i]^[j]);
If A[i]^[j]>d then begin d:=A[i]^[j]; l:=x*k; end;
end;
end;
Close(f);
For i:=0 to 3 do Dispose(A[i]);
End;
BEGIN
Clrscr;
d:=0; l:=0;
ReadF(-1);
ReadF(1);
Writeln('So lap nhieu nhat la: ',l,#10#13,'Voi so lan lap : ',d);
Readln;
END.
(Lời giải của Nguyễn Toàn Thắng *)
Bài giải của bạn Nguyễn Toàn Thắng dùng thuật toán lùa bò vào chuồng. Sau đây là
cách giải khác dùng thuật toán đếm số lần lặp.
Thuật toán: Tư tưởng thuật toán là dùng mảng đánh đấu có nghĩa là số x thì Lap[x] sẽ là
6
số lần xuất hiện của số x trong mảng. Vì số phần tử của mảng nhỏ hơn hoặc bằng 10
6
nên phần tử của mảng Lap phải là kiểu dữ liệu để có thể lưu trữ được 10 . Số x là số
nguyên kiểu integer và do giới hạn bộ nhớ là 64K nên ta dùng ba mảng động như sau:
MG = array[-maxint..maxint] of byte;
L[1..3] of ^MG;
Xử lý trong hệ cơ số 100.
Chương trình.
{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q+,R+,S+,T-,V+,X+,Y+}
{$M 16384,0,655360}
program bai91;{Đỗ Đức Đông}
uses crt;
const fi ='input.txt';
fo ='output.txt';
coso =100;
type mg =array[-maxint..maxint]of byte;
var L :array[1..3]of ^mg;
n,lap :longint;
kq :integer;
time :longint;
clock :longint absolute $00:$0046c;
procedure tao_test;
var f :text;
k :longint;
begin
n:=1000000;
Tin học & Nhà trường 100 Đề Toán - Tin học