OpenJudge - 09:明明的随机数

09:明明的随机数

限制
总时间限制: 1000ms 内存限制: 65536kB
题目表述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入
有2行,第1行为1个正整数,表示所生成的随机数的个数:N;
第2行有N个用空格隔开的正整数,为所产生的随机数。
输出
也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
样例输入

10
20 40 32 67 40 20 89 300 400 15

样例输出

8
15 20 32 40 67 89 300 400

思路点拨

思路有两种,分别如下

1:
我们可以用 < algorithm > 函数库中的sort把读入的数组排序,然后再进行处理,最后输出。
2:
我们直接调用STL中的set类型来定义,一边输入一边排序去重,然后再直接输出就行了。
(这里不得不说一下,STL真是简便!!!!!)

代码 1 (sort)

#include 
#include 
using namespace std;
const int maxn=100;
int n;
int arr[maxn+5];
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) 
		scanf("%d",&arr[i]);
	sort(arr+1,arr+1+n);
	int cnt=0;
	for(int i=1;i<=n;i++) 
		if(arr[i]!=arr[i+1]) cnt++;
	printf("%d\n",cnt);
	for(int i=1;i<=n;i++) 
		if(arr[i]!=arr[i+1]) printf("%d ",arr[i]);
	return 0;
}

代码 2 (set)

#include 
#include 
using namespace std;
int n;
set<int>arr;
set<int>::iterator it;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) {
		int temp;
		scanf("%d",&temp);
		arr.insert(temp);
	}
	printf("%d\n",arr.size());
	for(it=arr.begin();it!=arr.end();it++) 
		printf("%d ",*it);
	return 0;
}

如果还有什么问题的话,欢迎在评论区留言告诉小编哦~

你可能感兴趣的:(OpenJudge)