-
题目描述:
-
You are given an unsorted array of integer numbers. Your task is to sort this array and kill possible duplicated elements occurring in it.
-
输入:
-
For each case, the first line of the input contains an integer number N representing the quantity of numbers in this array(1≤N≤1000). Next N lines contain N integer numbers(one number per each line) of the original array.
-
输出:
-
For each case ,outtput file should contain at most N numbers sorted in ascending order. Every number in the output file should occur only once.
-
样例输入:
-
6 8 8 7 3 7 7
-
样例输出:
-
3 7 8
此题用STL中的set容器再恰当不过,因为set容器内的元素就是不重复的,而且每插入一个数都是按递增的顺序排的,内部是一棵红黑树(平衡检索二叉树)。不过要注意的是最后一个元素的输出最后不要有空格。
#include <iostream> #include <cstring> #include <set> using namespace std; int a[1010]; int main(){ int num; while(cin>>num){ memset(a,0,sizeof(a)); set<int>s; for(int i=0;i<num;i++){ cin>>a[i]; s.insert(a[i]); } set<int>::iterator it; for(it = s.begin();it!=s.end();it++){ if(it == (--s.end())) cout<<*it; else cout<<*it<<" "; } cout<<endl; } return 0; }
下面不用set容器来解这道题,思路也很简单,重复元素只记录一个,然后进行插入排序即可。
#include <iostream> #include <cstring> #include <algorithm> using namespace std; int a[1010]; int b[1010]; int main(){ int num; while(cin>>num){ memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); int k = 0; for(int i=0;i<num;i++){ cin>>a[i]; bool flag = false; for(int j=0;j<i;j++){ if(a[i] == a[j]){ flag = true; break; } } if(!flag){ b[k] = a[i]; k++; } } sort(b,b+k); for(int i=0;i<k-1;i++) cout<<b[i]<<" "; cout<<b[k-1]<<endl; } return 0; }