1204: 剔除相关数

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

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

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

样例输入
8
213 667 3 213 43 34 677 2
3
322 232 232
0

样例输出
2 3 667 677
None
来源

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;//map是以string为索引值,int为value的map,并命名为mp
vector<string>wc;

string rcp(string &s)
{
    string res = s;
    sort(res.begin(),res.end());
    return res;
}
int main()
{
    int n;
    string s;
    while(scanf("%d",&n),n!=0)
    {
        mp.clear();
        for(int i = 0; i < n; i++)
        {
            cin >> s;
            wc.push_back(s);
            string ans = rcp(s);
            mp[ans]++;
        }
        vector<string>ss;
        for(int i = 0; i < n; i++)
        {
            if(mp[rcp(wc[i])]==1)//因为value为int类型的所以以此为判断相同的是否只出现了一次
                ss.push_back(wc[i]);
        }
        sort(ss.begin(),ss.end());//排序
        int l = ss.size();
        if(l==0)
            cout << "None" << endl;
        else
        {
            cout << ss[0];
            for(int i = 1; i < l; i++)
                cout << " " << ss[i];
           cout << endl;
        }
        ss.clear();//清空值
        wc.clear();
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/drfcgjnkml/article/details/81461271