題目:
明明想在學校中請一些同學一起做一項問卷調查,爲了實驗的客觀性,他先用計算機生成了N個1到1000之間的隨機整數(N≤100),對於其中重複的數字,只保留一個,把其餘相同的數去掉,不同的數對應着不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成“去重”與“排序”的工作。
分析:
暴力+排序就是結果。
代碼:
const
maxn=1000000;
var
a:array [1..maxn] of longint;
flag:array [1..maxn] of boolean;
i,n,ans:longint;
procedure init;
var
i:longint;
begin
readln(n);
for i:=1 to n do
read(a[i]);
ans:=n;
end;
procedure qsort(l,r:longint);
var
i,j,k,mid:longint;
begin
i:=l;j:=r;mid:=a[(l+r) div 2];
repeat
while a[i]<mid do
inc(i);
while a[j]>mid do
dec(j);
if i<=j then
begin
k:=a[i];
a[i]:=a[j];
a[j]:=k;
inc(i);dec(j);
end;
until i>j;
if i<r then
qsort(i,r);
if j>l then
qsort(l,j);
end;
procedure main;
var
i:longint;
begin
qsort(1,n);
for i:=1 to n do
if flag[a[i]] then
begin
dec(ans);
a[i]:=0;
end
else
flag[a[i]]:=true;
writeln(ans);
for i:=1 to n do
if a[i]<>0 then
write(a[i],' ');
end;
begin
init;
main;
end.