最新消息:点击查看大S的省钱秘笈

Vijos P1316 明明的随机数 C语言版

Vijos题解 Slyar 136浏览 0评论

文章作者:姜南(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语言版

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (2)

  1. 大神,膜拜、、
    淡抹煙熏妝3年前 (2014-01-20)回复
  2. 太强大了!佩服啊
    1236年前 (2011-03-31)回复