#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
#include <set>
#include <map>
string zhuanhua(string a) //转化血型,方便之后排列组合
{
if(a=="A")
a="OA";
if(a=="B")
a="OB";
if(a=="O")
a="OO";
return a;
}
string test(string temp)//规范输出
{
if(temp=="BA"||temp=="AB") temp="AB";
else if(temp=="AA"||temp=="OA"||temp=="AO") temp= "A";
else if(temp=="BB"||temp=="OB"||temp=="BO") temp= "B";
else if(temp=="OO") temp="O";
return temp;
}
int main()
{
int gg=0;
string s;
vector<string>v1,v2;
cin>>s;
string father="",mother="";
for(int i=0;i<s.size();i++) //拆解输入,例如 A,B 拆解除A B
{
if(s[i]!=','&&gg==0)
{
father+=s[i];
}
else
{
gg=1;
if(s[i]!=',')
{
mother+=s[i];
}
}
}
string H1=zhuanhua(father); //将拆解到的血型进行转化
string H2=zhuanhua(mother);
set<string>Possible,Impossible;
for(int i=0;i<=1;i++) //排列组合
for(int j=0;j<=1;j++)
{
int a[2];
a[0]=H1[i];
a[1]=H2[j];
string Z(a,a+2);
Possible.insert(test(Z)); //set容器自动排序
}
Impossible.insert("A"); //在不可能的set容器之中加入所有可能
Impossible.insert("AB");
Impossible.insert("B");
Impossible.insert("O");
cout<<"Possible blood type:";
for(set<string>:: iterator it=Possible.begin();it!=Possible.end();it++)
{
cout<<*it<<" ";
Impossible.erase((*it));
} //输出可能出现的血型,并在不可能的容器之中删除这些血型
cout<<"Impossible blood type:";
for(set<string>:: iterator it=Impossible.begin();it!=Impossible.end();it++)
{
cout<<*it<<" "; //输出不可能出现的血型
}
return 0;
}
思路借鉴于学长,原文转到http://t.csdn.cn/flaJU;