10.05.2017

Tần suất

Tin học trẻ Quảng Bình 2013 - Bài 3/3
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