codevs 1075数组去重+排序&桶排序
2017-09-17 13:34
267 查看
题目描述 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> #include <algorithm> using namespace std; int main() { int n; int a[10000]={0}; int b[10000]={0}; int count=0; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; } sort(a,a+n); for(int i=0,j=0;i<n;i++) { if(a[i]!=a[i+1]) { b[j]=a[i]; count++; j++; } } cout<<count<<endl; for(int i=0;i<count;i++) { cout<<b[i]<<" "; } return 0; }
代码(解法二)(桶排序)
桶排序就是将对应的数存放到数组的对应位置(就是要自己准备N个空桶来能够使得输入的数据都有桶可存)优点:效率高。
缺点:占内存空间。
#include <iostream> #include <algorithm> using namespace std; int main() { int n; bool a[10000]={0}; int c; int count=0; cin>>n; for(int i=0;i<n;i++)//输入数据,存放到数组对应的位置,表示该对应位置有数据了(而且还省了排序) { cin>>c; a[c]=1; } for(int i=0;i<10000;i++)//计算占了位置的数据有多少个,每个桶不管有几个相同数据,这里之后+1,所以可以说直接去重了 { if(a[i]==1) count+=1; } cout<<count<<endl; for(int i=0;i<=9999;i++)//按顺序输出来 { if(a[i]==1) cout<<i<<" "; } return 0; }
相关文章推荐
- [树状数组]code[vs] 1082——线段树练习 3
- codevs 1282 约瑟夫问题 树状数组正解 解题报告
- [CODEVS3160]最长公共子串|后缀数组|后缀自动机
- [CODEVS3299]有序数组合并求第K大问题
- 【Codevs1282】 约瑟夫问题 树状数组 (11/1000)
- codevs1163 访问艺术馆 树型数组 记忆化搜索
- 【codevs4163】 hzwer与逆序对(树状数组+离散化)
- [codevs3296]有序数组合并
- Codevs 1500 后缀排序(后缀数组)
- POJ_P2774 Long Long Message/Codevs_P3160 最长公共子串(后缀数组)
- 【BZOJ1044】【tyvj3511】【codevs1870】木棍分割,二分答案+滚动数组+前缀和DP
- Codevs-4919 线段树练习4(区间加上一个值并求摸个区间整除k的数的个数,线段树+数组维护)
- code[vs] 1075 明明的随机数
- 【日常学习】【SPFA负环+数组模拟链表实现】codevs2645 Spore题解
- codevs1227 方格取数2 注意数组啊啊啊啊啊啊啊啊啊啊
- 【codevs3160】最长公共子串 后缀数组
- CODEVS 1075 明明的随机数
- 【CodeVS】1080 线段树练习 分块 线段树 树状数组 开放性
- 【codevs1081】【树状数组】区间修改 单点查询
- codevs 1082 一维树状数组区间修改区间查询