明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了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.