题目描述
一个数与另一个数如果含有相同数字和个数的字符,则称两数相关。现有一堆乱七八糟的整数,里面可能充满了彼此相关的数,请你用一下手段,自动地将其剔除。
输入
多实例测试。每组数据包含一个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;
}