codevs 天梯 明明的随机数

    xiaoxiao2021-03-26  20

    题目:

    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N11000之间的随机整数(N100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

    分析:

    暴力+排序就是结果。

    代码:

    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.

    转载请注明原文地址: https://ju.6miu.com/read-659189.html

    最新回复(0)