文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。
描述 Description
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数 字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“ 去重”与“排序”的工作。
输入格式 Input Format
输入有2行,第1行为1个正整数,表示所生成的随机数的个数:
N
第2行有N个用空格隔开的正整数,为所产生的随机数。
输出格式 Output Format
输出也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
Tip:最简单的办法就是桶排序,这样进行一次筛选和排序就都出来了。
桶排序也叫基数排序。如果我们有N个整数,范围从1到M(或从0到M-1),我们留置一个数组A,大小为M,并初始化为0。于是该数组有M个单元(我们称之为桶), 开始他们都是空的。当数a被读入时,A[a]增1。当所有的输入被读进时,扫描数组,打印出排好序的表。这就是所谓的桶排序。
#include <stdio.h>
int main(){
int i,j,n,sum=0,x[1001]={0};
scanf("%d",&n);
for (i=1;i<=n;i++){
scanf("%d",&j);
if (x[j]==0) sum++;
x[j]=1;
}
printf("%d\n",sum);
for (i=1;i<=1000;i++)
if (x[i]==1) printf("%d ",i);
system("pause");
return 0;
}
转载请注明:Slyar Home » Vijos P1316 明明的随机数 C语言版