Cho tập hợp S có N phần tử nguyên dương {s1, s2,…, sN}.
(1 <= N <= 32000; 0 < si <= 32000; 1 <= i <= N)
Yêu cầu: Hãy liệt kê các phần tử trong S có số lần xuất hiện lớn hơn một lần.
Dữ liệu vào: Cho trong file văn bản TS.INP có cấu trúc như sau:
- Dòng 1: Ghi số nguyên dương N.
- Dòng 2: Ghi N số nguyên dương là giá trị các phần tử của tập hợp S, các số đượ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 TS.OUT trên nhiều dòng, dòng thứ i ghi 2 số si di, hai số cách nhau một dấu cách. Trong đó si là phần tử xuất hiện trong S lớn hơn một lần và di tương ứng là số lần si xuất hiện.
Ví dụ:
TS.INP
7
2 5 5 3 5 3 9
TS.OUT
3 2
5 3
Lời giải tham khảo
uses crt;
var f:text;
n,i,j,k,d,tg,b:longint;
a,e,x:array[1..1000] of longint;
begin
assign(f,'TS.INP');
reset(f);
readln(f,n);
for i:=1 to n do read(f,a[i]);
close(f);
assign(f,'TS.OUT');
rewrite(f);
for i:=1 to n do
for j:=1 to n-1 do
if a[j]>a[j+1] then
begin
tg:=a[j+1];
a[j+1]:=a[j];
a[j]:=tg;
end;
for i:=1 to n do
begin
if a[i]=a[i+1] then d:=d+1
else if d>=1 then
begin + chr$(13) + chr$(10) + _
b:=b+1;
e[b]:=a[i];
x[b]:=d+1;
d:=0;
end;
end;
for i:=b downto 1 do write(f,x[i],' ');
writeln(f);
for i:=b downto 1 do write(f,e[i],' ');
close(f);
end.
No comments:
Post a Comment
Cảm ơn bạn đã nhận xét