描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据(用于不同的调查),希望大家能正确处理)。
注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。
当没有新的输入时,说明输入结束。
思路一:
- 第一步:使用vector存输入的数据。
- 第二步:先排序,在删除重复的,unique是删除相邻重复的,所以先排序
- 第三步:输出
#include <iostream>
#include <vector>
#include <algorithm> //用sort算法
using namespace std;
void deduplication(vector<int>& c){
sort(c.begin(),c.end()); //先排序
//unique是假删除,只是把重复的放在后面,不重复的放在前面这样子,返回不重复的下一个指针
vector<int>::iterator new_end = unique(c.begin(), c.end());
//这一步是真正把重复的删除了
c.erase(new_end,c.end());
}
int main()
{
int loop = 0;
vector<int> data;
while(cin>>loop) //多组数据输入
{
data.clear();
while(loop--){
int number;
cin>>number;
data.push_back(number);
}
// sort(data.begin(), data.end());
deduplication(data);
for(int i=0;i<data.size();i++){
cout << data[i] << endl;
}
}
return 0;
}
思路二:使用set容器
set容器不会插入重复的数据,所以使用set可以直接省略上面的第二步,先插入,后输出即可
#include <iostream>
#include <set>
#include <algorithm> //用sort算法
using namespace std;
// void deduplication(vector<int>& c){
// sort(c.begin(),c.end()); //先排序
// //unique是假删除,只是把重复的放在后面,不重复的放在前面这样子,返回不重复的下一个指针
// vector<int>::iterator new_end = unique(c.begin(), c.end());
// //这一步是真正把重复的删除了
// c.erase(new_end,c.end());
// }
int main()
{
int loop = 0;
set<int> data;
while(cin>>loop) //多组数据输入
{
data.clear(); //清除上一个数据影响
while(loop--){
int number;
cin>>number;
data.insert(number);
}
for(set<int>::iterator it=data.begin();it!=data.end();it++){
cout <<*it << endl;
}
}
return 0;
}
思路三 :哈希表
- 使用哈希表,把有随机数的地方置1即可,然后循环查找置为1的地方输出
#include <iostream>
#include <set>
#include <algorithm> //用sort算法
using namespace std;
int main()
{
int loop = 0 ,n=0;
while(cin>>loop) //多组数据输入
{
//使用哈希表的方法
int a[1001] = {0}; //初始化数组为0
while(loop--){
cin >> n;
a[n] = 1;
}
for(int i=0;i<1001;i++){
if(a[i]==1){
cout << i <<endl;
}
}
}
return 0;
}
使用C++自带的unordered_map,进行哈希数据存储
#include <iostream>
#include <set>
#include <algorithm> //用sort算法
#include <unordered_map> //用来使用哈希
using namespace std;
int main()
{
int loop = 0 ,n=0;
while(cin>>loop) //多组数据输入
{
//使用哈希表的方法
// int a[1001] = {0}; //初始化数组为0
unordered_map <int,int> a(1001);
while(loop--){
cin >> n;
a[n] = 1;
}
for(int i=0;i<1001;i++){
if(a[i]==1){
cout << i <<endl;
}
}
}
return 0;
}