题目描述 Description
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入描述 Input Description
有2行,第1行为1个正整数,表示所生成的随机数的N个数:第2行有N个用空格隔开的正整数,为所产生的随机数
输出描述 Output Description
第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小
到大排好序的不相同的随机数。
样例输入 Sample Input
1020 40 32 67 40 20 89 300 400 15
样例输出 Sample Output
815 20 32 40 67 89 300 400
说明
题目很水,我的思路就是先将数组排序,然后去重即可,或者用桶排序,速度很快(本题推荐)
代码(解法一)
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
int a[10000]={0};
int b[10000]={0};
int count=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
for(int i=0,j=0;i<n;i++)
{
if(a[i]!=a[i+1])
{
b[j]=a[i];
count++;
j++;
}
}
cout<<count<<endl;
for(int i=0;i<count;i++)
{
cout<<b[i]<<" ";
}
return 0;
}
代码(解法二)(桶排序)
桶排序就是将对应的数存放到数组的对应位置(就是要自己准备N个空桶来能够使得输入的数据都有桶可存)
优点:效率高。
缺点:占内存空间。
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
bool a[10000]={0};
int c;
int count=0;
cin>>n;
for(int i=0;i<n;i++)//输入数据,存放到数组对应的位置,表示该对应位置有数据了(而且还省了排序)
{
cin>>c;
a[c]=1;
}
for(int i=0;i<10000;i++)//计算占了位置的数据有多少个,每个桶不管有几个相同数据,这里之后+1,所以可以说直接去重了
{
if(a[i]==1)
count+=1;
}
cout<<count<<endl;
for(int i=0;i<=9999;i++)//按顺序输出来
{
if(a[i]==1)
cout<<i<<" ";
}
return 0;
}
本文介绍了一种用于学生调查问卷的选择参与者的算法。通过输入随机生成的学生编号,使用两种方法实现编号的去重与排序,确保调查的客观性。一种是传统的排序后去重方法,另一种则是桶排序。
144

被折叠的 条评论
为什么被折叠?



