测试 1115. 血型判断 II《编程思维与实践》个人学习笔记

编程入门 行业动态 更新时间:2024-10-11 17:19:06

测试 1115. <a href=https://www.elefans.com/category/jswz/34/1716343.html style=血型判断 II《编程思维与实践》个人学习笔记"/>

测试 1115. 血型判断 II《编程思维与实践》个人学习笔记

题目



思路

用map<string,string>来做这个题目最方便了,开两个map分别用来表示
血型->遗传因子
遗传因子->血型的映射

然后穷举所有可能即可(注意排列组合的组合前后顺序)

代码

#include <iostream>
#include<bits/stdc++.h>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cctype>
#include<stdlib.h>
#include<cstdio>using namespace std;int main()
{string f,m,s;cin >> f >> m >> s;map<string,string>xue;xue["AA"] = "A";xue["AO"] = "A";xue["OA"] = "A";xue["AB"] = "AB";xue["BA"] = "AB";xue["BB"] = "B";xue["BO"] = "B";xue["OB"] = "B";xue["OO"] = "O";map<string,vector<char>>yin;yin["A"].push_back('A');yin["A"].push_back('O');yin["AB"].push_back('A');yin["AB"].push_back('B');yin["B"].push_back('B');yin["B"].push_back('O');yin["O"].push_back('O');if(s == "?"){set<string> vv;set<string> maybe;string s;for(auto y : yin[m]){for(auto x:yin[f]){s = "";s += y;s += x;vv.insert(s);}}for(auto x : vv){//cout  << x << endl;maybe.insert(xue[x]);}cout << f << " " << m << " ";cout << "{";int len = maybe.size();string * ss = new string[len];int i = 0;for(set<string>::iterator x = maybe.begin(); x != maybe.end(); x++, i++)ss[i] = *x;for(int i= 0; i < len - 1; i++)cout << ss[i] <<",";cout << ss[len - 1] << '}';}else if(m == "?"){vector<string> v;map<string,int> mm;mm["A"] = mm["AB"] = mm["O"] = mm["B"] = 0;for(auto x : yin[f]){string str = "";for(auto y : yin["A"]){str+=x;str+=y;//得到可能的孩子的血型;if(xue[str] == s){mm["A"]+=1;}str = "";str+=y;str+=x;//得到可能的孩子的血型;if(xue[str] == s){mm["A"]+=1;}}str = "";for(auto y : yin["AB"]){str+=x;str+=y;//得到可能的孩子的血型;if(xue[str] == s){mm["AB"]+=1;}str = "";str+=y;str+=x;//得到可能的孩子的血型;if(xue[str] == s){mm["AB"]+=1;}}str = "";for(auto y : yin["B"]){str+=x;str+=y;//得到可能的孩子的血型;if(xue[str] == s){mm["B"]+=1;}str = "";str+=y;str+=x;//得到可能的孩子的血型;if(xue[str] == s){mm["B"]+=1;}}str = "";for(auto y : yin["O"]){str+=x;str+=y;//得到可能的孩子的血型;if(xue[str] == s){mm["O"]+=1;}str = "";str+=y;str+=x;//得到可能的孩子的血型;if(xue[str] == s){mm["O"]+=1;}}}int flag = true;set<string> ss;if(mm["O"] == 0 && mm["AB"] == 0 && mm["B"] == 0 && mm["A"] == 0 )flag = false;if(mm["A"] != 0)ss.insert("A");if(mm["AB"] != 0)ss.insert("AB");if(mm["B"] != 0)ss.insert("B");if(mm["O"] != 0)ss.insert("O");cout << f << " ";if(!flag) cout << "impossible" << " "  << s <<endl;else{int len = ss.size(); int i = 0;string *sp = new string[len];for(auto it = ss.begin(); it != ss.end(); it++, i++)sp[i] = *it;cout << "{";for(int i = 0; i < len - 1; i++)cout << sp[i]<<",";cout << sp[len - 1] << "}";cout << " " <<s<<endl;}}
else if(f == "?"){vector<string> v;map<string,int> mm;mm["A"] = mm["AB"] = mm["O"] = mm["B"] = 0;for(auto x : yin[m]){string str = "";for(auto y : yin["A"]){str+=x;str+=y;//得到可能的孩子的血型;if(xue[str] == s){mm["A"]+=1;}str = "";str+=y;str+=x;//得到可能的孩子的血型;if(xue[str] == s){mm["A"]+=1;}}str = "";for(auto y : yin["AB"]){str+=x;str+=y;//得到可能的孩子的血型;if(xue[str] == s){mm["AB"]+=1;}str = "";str+=y;str+=x;//得到可能的孩子的血型;if(xue[str] == s){mm["AB"]+=1;}}str = "";for(auto y : yin["B"]){str+=x;str+=y;//得到可能的孩子的血型;if(xue[str] == s){mm["B"]+=1;}str = "";str+=y;str+=x;//得到可能的孩子的血型;if(xue[str] == s){mm["B"]+=1;}}str = "";for(auto y : yin["O"]){str+=x;str+=y;//得到可能的孩子的血型;if(xue[str] == s){mm["O"]+=1;}str = "";str+=y;str+=x;//得到可能的孩子的血型;if(xue[str] == s){mm["O"]+=1;}}}int flag = true;set<string> ss;if(mm["O"] == 0 && mm["AB"] == 0 && mm["B"] == 0 && mm["A"] == 0 )flag = false;if(mm["A"] != 0)ss.insert("A");if(mm["AB"] != 0)ss.insert("AB");if(mm["B"] != 0)ss.insert("B");if(mm["O"] != 0)ss.insert("O");if(!flag) cout << "impossible" << " "  << m << " " <<s << endl;else{int len = ss.size(); int i = 0;string *sp = new string[len];for(auto it = ss.begin(); it != ss.end(); it++, i++)sp[i] = *it;cout << "{";for(int i = 0; i < len - 1; i++)cout << sp[i]<<",";cout << sp[len - 1] << "}";cout << " " <<m << " " << s << endl;;}}}

更多推荐

测试 1115. 血型判断 II《编程思维与实践》个人学习笔记

本文发布于:2024-03-06 20:47:55,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1716340.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:血型   学习笔记   思维   测试   II

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!