随机数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.