nyoj 48-小明的调查作业(set)

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\n", t - cnt);
29     for(iter = my_set.begin(); iter != my_set.end(); ++ iter, ++ i)
30         if(i == my_set.size() - 1)
31             printf("%d\n", *iter);
32         else
33             printf("%d ", *iter);
34     return 0;
35 }
 
  

猜你喜欢

转载自www.cnblogs.com/GetcharZp/p/9101887.html