九度OJ 1041 简单排序

来源:互联网 发布:金手指炒股软件下载 编辑:程序博客网 时间:2024/05/16 13:40
题目描述:

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.

样例输入:
68 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;}



0 0
原创粉丝点击