题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N 个 1 到 1000 之间的随机整数( N≤1000 ),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。现在明明把他已经用计算机生成好的 N 个随机数按照下面的输入描述的格式交给你,请你协助明明完成“去重”与“排序”的工作。
注:测试用例保证输入参数的正确性,答题者无需验证。
数据范围: ,输入的数字大小满足
输入描述:
第一行先输入随机整数的个数 N ,接下来的 N 行再输入相应个数的整数。具体格式请看下面的"示例"。
输出描述:
返回多行,处理后的结果
输入例子1:
3
2
2
1
输出例子1:
1
2
例子说明1:
输入解释:
第一个数字是3,也即这个小样例的N=3,说明用计算机生成了3个1到1000之间的随机整数,接下来每行一个随机数字,共3行,也即这3个随机数字为:
2
2
1
所以样例的输出为:
1
2
代码
#include<iostream>
using namespace std;
int main(){
int N,n;
int a[1000];
int i,j,k;
while(scanf("%d",&n)!=EOF){
for(i=0; i<n; i++)
scanf("%d",&a[i]);
//循环比较去重
for(i=0; i<n; i++)
for(j=i+1; j<n; j++){
if(a[j]==a[i]){
for(k=j; k<n-1; k++)
a[k]=a[k+1];
n--;
j--;
}
}
//冒泡排序
for(i=0; i<n-1; i++)
for(j=0; j<n-1-i; j++){
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
for(i=0; i<n; i++){
cout<<a[i]<<endl;
}
}
}
桶排序(其实我觉得很像计数排序)
#include <iostream>
using namespace std;
int main(){
int N,n;
while(cin>>N){
int a[1000]={0};
while(N--){
cin>>n;
a[n]=1;
}
for(int i=0;i<1000;i++){
if(a[i])//这步其实是很妙的一步,把空0就给去掉了。
cout<<i<<endl;
}
}
return 0;
}
利用vector的sort,unique和erase去重,排序
#include<iostream>
#include<vector>
#include<algorithm>
using std::cout;
using std::cin;
using std::endl;
using std::vector;
using std::unique;
int main()
{
vector<int> vec;
int n, num;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> num;
vec.push_back(num);
}
sort(vec.begin(), vec.end());
auto end_unique = unique(vec.begin(), vec.end());
vec.erase(end_unique, vec.end());
for (auto it = vec.begin(); it != vec.end(); it++)
cout << *it << endl;
system("pause");
return 0;
}