pascal 如何去重

来源:百度知道 编辑:UC知道 时间:2024/05/13 20:06:11
一堆数,中间有重复的,怎么去掉重复的数呢,
题目是这样的
描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入格式
输入有2行,第1行为1个正整数,表示所生成的随机数的个数:
N
第2行有N个用空格隔开的正整数,为所产生的随机数。
输出格式
输出也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

数组排列我会,去重不会,谁告诉哈~

其实有一个很简单的算法,既然范围是1~1000,就定义一个1~1000的布尔数组a,全部赋初值False,生成的随机数是几就把a[随机数]赋为True,然后从1到1000,如果为True就输出循环变量,既可以排序又可以去重
源代码:
program sort_and_filt;
var
a:array[1..1000]of boolean;
i,j,n:integer;
begin
fillchar(a,sizeof(a),false); {赋初值false}
readln(n);
for i:=1 to n do begin
read(j);
a[j]:=true; end; {读入数据}
for i:=1 to 1000 do
if a[i] then
j:=j+1; {统计个数}
writeln(j);
for i=1 to 1000 do
if a[i] then
write(i,' ');
end.

统排就行了,然后整理输出

var i,n,t:longint;
a:array[0..1001] of longint;
begin
readln(n);
for i:=1 to 1000 do a[i]:=0;
for i:=1 to n do
begin
read(t);
a[t]:=a[t]+1;
end;
t:=0;
for i:=1 to 1000 do
if a[i]>0 then t:=t+1;
writeln(t);
t:=0;
for i:=1 to 1000 do
if a[i]>0 then
begin
if t=0 then t:=t+1