1245:不重复地输出数
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 9376 通过数: 4958
【题目描述】
输入n个数,从小到大将它们输出,重复的数只输出一次。保证不同的数不超过500个。
【输入】
第一行是一个整数n。1 ≤ n ≤ 100000。
之后n行,每行一个整数。整数大小在int范围内。
【输出】
一行,从小到大不重复地输出这些数,相邻两个数之间用单个空格隔开。
【输入样例】
5
2 4 4 5 1
【输出样例】
1 2 4 5
先排序,再把相同的数留一个,输出就行 #include<bits/stdc++.h> using namespace std; #define MAX 100009 int n,m; long long sum=0; long long t=0,a[MAX],b[MAX]; void merge(long long a[],int s,int m,int e) { int pb=0,p1=s,p2=m+1; while(p1<=m&&p2<=e) { if(a[p2]<a[p1]) { b[pb++]=a[p2++]; } else b[pb++]=a[p1++]; } while(p1<=m) b[pb++]=a[p1++]; while(p2<=e) b[pb++]=a[p2++]; for(int i=0;i<=e-s;i++) a[s+i]=b[i]; } void mergesort(long long a[],int s,int e) { if(s<e) { int m=s+(e-s)/2; mergesort(a,s,m); mergesort(a,m+1,e); merge(a,s,m,e); } } /*long long numsearch(long long a[],int size,long long t) { int l=0,r=size-1; long long lastpos=-1; while(l<=r) { int mid=l+(r-l)/2; if(a[mid]>t) r=mid-1; else { lastpos=mid; l=mid+1; } } return lastpos; } long long p,q,x; double EPS=1e-7; double f(double x){ return x*x*x*x*x-15*x*x*x*x+85*x*x*x-225*x*x+274*x-121; } */ int main() { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%ld",&a[i]); mergesort(a,0,n-1);//把输入的数,归并排序 ,放在a数组中 for(int i=0;i<n;++i)//相同的数,只留一个 ,放在b组中 { b[t++]=a[i]; while(a[i]==a[i+1]) i++; } for(int i=0;i<t;i++)//输出 printf("%ld ",b[i]); return 0; }