题目描述 Description
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入描述 Input Description
有2行,第1行为1个正整数,表示所生成的随机数的N个数:
第2行有N个用空格隔开的正整数,为所产生的随机数
输出描述 Output Description
第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小
到大排好序的不相同的随机数。
样例输入 Sample Input
10
20 40 32 67 40 20 89 300 400 15
样例输出 Sample Output
8
15 20 32 40 67 89 300 400
解法一:桶的思想
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a[1000]={0};
for(int i=1;i<=n;++i){
int temp;
cin>>temp;
a[temp]=1;
}
int cnt=0;
for(int i =1;i<=1000;++i)
if(a[i]==1)cnt++;
cout<<cnt<<endl;
int flag=0;
for(int i=1;i<=1000;++i){
if(a[i]==1){
if(flag)cout<<" "<<i;
else cout<<i;
flag++;
}
}
return 0;
}
解法二:sort+去重
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n,a[111],s[111],m=1;
cin>>n;
for(int i=0;i<n;++i)
cin>>a[i];
sort(a,a+n);
s[0]=a[0];
//去重
for(int i=1;i<n;++i){
if(a[i]!=a[i-1]){
s[m]=a[i];
m++;
}
}
cout<<m<<endl;
int flag=0;
for(int i=0;i<m;++i){
if(flag)cout<<" "<<s[i];
else cout<<s[i];
flag++;
}
cout<<endl;
return 0;
}
解法三:sort,unique(a,a+n)-a;去重
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n,a[111];
cin>>n;
for(int i=0;i<n;++i)
cin>>a[i];
sort(a,a+n);//sort排序
int cnt=unique(a,a+n)-a;去重
cout<<cnt<<endl;
int flag=0;
for(int i=0;i<cnt;++i){
if(flag)cout<<" "<<a[i];
else cout<<a[i];
flag++;
}
return 0;
}
解法四:简单的STL
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
int main(){
set<int> s;
int n;
cin>>n;
for(int i=0;i<n;++i){
int temp;
cin>>temp;
s.insert(temp);
}
int ans=0;
set<int>::iterator it;
for(it=s.begin();it!=s.end();++it)
ans++;
cout<<ans<<endl;
it=s.begin();
cout<<*it;
for(it=s.begin();it!=s.end();it++)
if(it!=s.begin())cout<<" "<<*it;
cout<<endl;
return 0;
}
明明的随机数
最新推荐文章于 2023-06-14 23:51:33 发布