zzulioj 1204 剔除相关数(map和vector的应用)

来源:互联网 发布:心事谁人知 张惠妹 编辑:程序博客网 时间:2024/04/26 01:45

Description

一个数与另一个数如果含有相同数字和个数的字符,则称两数相关。现有一堆乱七八糟的整数,里面可能充满了彼此相关的数,请你用一下手段,自动地将其剔除。

Input

多实例测试。每组数据包含一个n(n<1000),和n个int范围内的正整数。若n为0,表示结束。

Output

按从小到大的顺序输出非相关数,若没有非相关数,则输出None。

Sample Input

8
213 667 3 213 43 34 677 2
3
322 232 232
0

Sample Output

2 3 667 677
None

思路:利用STL解题方便很多,充分利用STL中map以及vector容器的性质。

#include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<vector>#include<cstring>#include<string>#include<map>using namespace std;map<string,int>mp;vector<string>wc;string rp(string &s)//把每个数字按字典序重新排列{    string res=s;    sort(res.begin(),res.end());    return res;}int main(){    string s;    int i,n;    while(scanf("%d",&n),n!=0)    {        mp.clear();        for(i=0;i<n;i++)        {            cin>>s;            wc.push_back(s);//先将s压入容器中            string ans=rp(s);            mp[ans]++;        }        vector<string>ss;        for(i=0;i<n;i++)        {            if(mp[rp(wc[i])]==1)//如果该数字只出现一次的话,压入另一个容器中;                ss.push_back(wc[i]);        }        sort(ss.begin(),ss.end());        int k=ss.size();        if(k==0)            printf("None\n");        else        {            cout<<ss[0];            for(i=1;i<k;i++)                cout<<' '<<ss[i];            printf("\n");        }        ss.clear();        wc.clear();    }    return 0;} 



0 0