有 n 个 1 到 1000 之间的整数 (1≤n≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉。然后再按照指定的排序方式把这些数排序。
Input
第 1 行为字母 A
或 D
,A
表示按照升序排序,D
表示按照降序排序。
第 2 行开始有若干个用一个空格或换行符分隔的正整数。
Output
相互之间用一个空格分隔的经去重和排序后的正整数。最后一个数后没有空格。
Examples
Input
A 20 40 32 67 40 20 89 300 400 15
Output
15 20 32 40 67 89 300 400
方法多多, 可以用flag数组记录取用与否,可以用set,可以用vector后unique_copy
#include <stdio.h> #include <stdlib.h> #include <string.h> int cmp1(const void *a,const void *b){return *(int*)b-*(int*)a;} int cmp2(const void *a,const void *b){return *(int*)a-*(int*)b;} int main() { char c; int a[100],l,tmp; int flag[1001]={0}; scanf("%c\n",&c); int i=0,j,k; while(scanf("%d",&tmp)!=EOF) { if(flag[tmp]==0) { a[i++]=tmp; flag[tmp]=1; } } if(c=='A') qsort(a,i,sizeof(a[0]),cmp2); if(c=='D') qsort(a,i,sizeof(a[0]),cmp1); for(j=0;j<i-1;j++) printf("%d ",a[j]); printf("%d\n",a[j]); return 0; }
#include <iostream> #include <vector> #include <algorithm> using namespace std; bool cmp(const int a,const int b){return a>b;} int main() { char c;cin>>c; int tmp; vector<int> v,vv; while(cin>>tmp) v.push_back(tmp); if(c=='D') sort(v.begin(),v.end(),cmp); else sort(v.begin(),v.end()); unique_copy(v.begin(),v.end(),back_inserter(vv)); for(auto& x:vv) cout<<x<<' '; return 0; }
1 #include <iostream> 2 #include <algorithm> 3 #include <vector> 4 bool cmp(int i,int j) 5 {return (i<j);} 6 7 using namespace std; 8 9 int main () 10 { 11 int b,i=5; 12 char c; 13 cin>>c; 14 vector<int> v; 15 while(cin>>b) 16 { 17 v.push_back(b); 18 } 19 sort(v.begin(),v.end(),cmp); 20 21 if(c=='A') 22 { 23 vector<int>::iterator it=v.begin(); 24 cout<<*(it++); 25 for(;it!=v.end();it++) 26 { 27 if(*(it)==*(it-1)) continue; 28 cout<<' '<<*(it); 29 } 30 } 31 if(c=='D') 32 { 33 vector<int>::iterator it=v.end()-1; 34 cout<<*(it--); 35 for(;it>=v.begin();it--) 36 { 37 if(*(it)==*(it+1)) continue; 38 cout<<' '<<*(it); 39 } 40 } 41 42 return 0; 43 }