题目:
蒜头君想在学校里请一些同学一起做一项问卷调查,为确保实验客观性,他先用计算机生成n(i<=n<=100)个1到1000之间的随机整数,对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应不同的学生的学号。然后把这些数从小到大排序。
请完成“去重"和"排序”的工作
输入格式
共两行,第一行为一个正整数n
第二行有n个用空格隔开的正整数,为所产生的随机数
输出格式
每一行输出一个正整数m,表示不相同的随机数的个数,第二行输出m个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
样例输入
10
20 40 32 67 40 20 89 300 400 15
样例输出
8
15 20 32 40 67 89 300 400
- 分析思路:
可以使用去重函数
也可以用一般做法
先排序,再去重
- 代码:
#include <iostream>
#include <algorithm>
using namespace std;
int num[110];
int ans[110];
int main(){
int n,m;
cin>>n; //数的个数
for(int i=0;i<n;i++){
cin>>num[i];
}
sort(num,num+n);
m=0; //初始化排列并去重后的随机数个数为0
for(int i=0;i<n;i++){ //扫描一遍数组
if(i!=0&&num[i]!=num[i-1]){ //后面的数和前面的不相等
ans[m++]=num[i-1];
}
}
ans[m++]=num[n-1]; //加上最后一个数
cout<<m<<endl;
for(int i=0;i<m;i++){ //输出去重后的随机数
if(i!=m-1){
cout<<ans[i]<<" ";
}
else{
cout<<ans[i]<<endl;
}
}
return 0;
}