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