随机数

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.明明的随机数(random.pas/c/cpp)

*题目部分

【问题描述】

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

【输入文件】

输入文件random.in 有2行,第1行为1个正整数,表示所生成的随机数的个数:N

第2行有N个用空格隔开的正整数,为所产生的随机数。

【输出文件】

输出文件random.out 也是2行,第1行为1个正整数M,表示不相同的随机数的个

数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。【输入样例】

10

20 40 32 67 40 20 89 300 400 15

【输出样例】

8

15 20 32 40 67 89 300 400

*解答部分

此题是一道基础题,主要考了排序算法以及文件的简单操作。

我们先看此题的数据量N≤100,很容易想到此题可以用冒泡/直接插入/选择排序等时间复杂度为O(n*n)的算法。而且这样做不会超时。

实际上,由于0

我们用Hash=0表示没有i这个数,hash=1 表示有i这个数。

那么,每次读一个I,只要做这种操作,最后统计一下即可。

注意点一:打印时,最后切勿多打空格,否则0分。

具体代码如下:

program noip2006_1_random;

const maxn=1050;

var a:array[1..maxn]of boolean;

i,n,x,max:longint;

procedure first;

begin

assign(input,'random.in');

assign(output,'random.out');

reset(input);rewrite(output);

end;

Begin

first;

readln(input, n);max:=0;

fillchar(a,sizeof(a),0);

for i:=1 to n do

begin

read(input,x);

a[x]:=true;

if max

end;

n:=0;

for i:=1 to max do

if a[i] then inc(n);

writeln(n);

for i:=1 to max-1 do

if a[i] then write(output,i,' ');

if max<>0 then writeln(output,max); close(input);close(output);

end.

相关文档
最新文档