Tóm tắt Cho mảng A gồm n phần tử, nhiệm vụ của bạn là đi tìm phần tử có giá trị cao thứ 2 trong mảng.
Nghĩa là với mảng 9 4 9 8 3 8 7 thì phần tử có giá trị cao thứ 2 trong mảng sẽ là 8
Định nghĩa
max: lưu vị trí có giá trị cao nhất trong mảng A
và res (result): lưu vị trí có giá trị cao thứ 2 trong mảng A
kết quả là write(res,' ', a[res])
Ý tưởng
for 1 -> n:
nếu như a[i] > a[max]:
sau khi chạy hết vòng lặp, ta lại chạy tiếp vòng lặp thứ 2:
res = 1;
for i := 2 to n
if (a[i] > a[res]) và (a[i] < max) ta cập nhật res = i
Hàm eof(f : text) : bool
Nếu eof(f) = true thì đã duyệt được hết tệp
ngược lại chưa duyệt được hết
n = 1
while eof(f) = false do
begin
read(a[n]);
n = n+1
end;
n = n-1
Trường hợp in ra -1 khi:
Các phần tử trong A có giá trị bằng nhau
nghĩa là:
a[1] = a[2] = ... = a[n]
ví dụ: 9 9 9 9 9
kết quả cần in là -1
program tom;
uses crt;
var a : array[1..1000] of longint;
n : integer;
i : integer;
max, res : integer;
f,g : text;
BEGIN
clrscr;
n := 1;
assign(f, 'tom.inp'); reset(f);
while eof(f) = false do
begin
read(f, a[n]);
n := n+1;
end;
n := n-1;
max := 2;
res := -1;
for i := 2 to n do
if (a[i] > a[max]) then max := i;
for i := 1 to n do
begin
if (res = -1) then
begin
if (a[i] < a[max]) then res := i;
end
else if (a[i] > a[res]) and (a[i] < a[max]) then res := i;
end;
assign(g, 'tom.out'); rewrite(g);
if (res = -1) then write(g, res)
else write(g, res,' ', a[res]);
close(g);
END.