48-小明的调查作业
内存限制:64MB
时间限制:1000ms
Special Judge: No
accepted:15
submit:29
题目描述:
小明的老师布置了一份调查作业,小明想在学校中请一些同学一起做一项问卷调查,聪明的小明为了实验的客观性,想利用自己的计算机知识帮助自己。他先用计算机生成了N个1到1000之间的随机整数(0<N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入描述:
输入有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
分析:
利用set的去重、排序特性直接解决问题
核心代码:
1 set <int> my_set; 2 pair <set<int>::iterator, bool> pr; 3 set <int> :: iterator iter; 4 for(int i = 0; i < t; ++ i) 5 { 6 scanf("%d", &temp); 7 pr = my_set.insert(temp); 8 if(!temp) cnt ++; 9 } 10 for(iter = my_set.begin(); iter != my_set.end(); ++ iter) 11 printf("%d ", *iter);
C/C++代码实现(AC):
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <cmath> 6 #include <stack> 7 #include <map> 8 #include <queue> 9 #include <set> 10 11 using namespace std; 12 const int MAXN = 1010; 13 14 int main() 15 { 16 17 int t, temp, i, cnt = 0; 18 scanf("%d", &t); 19 set <int> my_set; 20 set <int> ::iterator iter; 21 pair <set<int>::iterator, bool> pr; 22 for(int i = 0; i < t; ++ i) 23 { 24 scanf("%d", &temp); 25 pr = my_set.insert(temp); 26 if (!pr.second) cnt ++; 27 } 28 printf("%d ", t - cnt); 29 for(iter = my_set.begin(); iter != my_set.end(); ++ iter, ++ i) 30 if(i == my_set.size() - 1) 31 printf("%d ", *iter); 32 else 33 printf("%d ", *iter); 34 return 0; 35 }