赞
踩
6.5-血型遗传检测
题目描述
血型遗传对照表如下:
父母血型 子女会出现的血型 子女不会出现的血型
O与O O A,B,AB
A与O A,O B,AB
A与A A,O B,AB
A与B A,B,AB,O ——
A与AB A,B,AB O
B与O B,O A,AB
B与B B,O A,AB
B与AB A,B,AB O
AB与O A,B O,AB
AB与AB A,B,AB O
请实现一个程序,输入父母血型,判断孩子可能的血型。
给定两个字符串father和mother,代表父母的血型,请返回一个字符串数组,代表孩子的可能血型(按照字典序排列)。
测试样例:
”A”,”A”
返回:[”A”,“O”]
分析:这题一看便知可以通过找规律通过合理的if-else解决,匹配不同的结果。父母血型中有AB的为一类进行处理,剩下的分为一类。剩下的父母血型匹配中儿女会出现的血型必然有O,父母有A必有A,有B必有B,一A一B必有AB。
但这样代码会显得繁琐,不简便,可以使用STL里的map,简化代码,提高编码效率。
class ChkBloodType {
public:
vector<string> chkBlood(string father, string mother) {
// write code here
vector<string> str;
if(father=="AB"||mother=="AB")
{
str.push_back("A");
if(father!="O"&&mother!="O")
str.push_back("AB");
str.push_back("B");
}
else
{
if(father=="A"||mother=="A")
{
str.push_back("A");
if(father=="B"||mother=="B")
{
str.push_back("AB");
str.push_back("B");
str.push_back("O");
}
else
str.push_back("O");
}
else if(father=="B"||mother=="B")
{
if(father=="A"||mother=="A")
{
str.push_back("A");
str.push_back("AB");
str.push_back("B");
str.push_back("O");
}
else
{
str.push_back("B");
str.push_back("O");
}
}
else
str.push_back("O");
}
return str;
}
};
7.字符串替换
题目描述
请你实现一个简单的字符串替换函数。原串中需要替换的占位符为”%s”,请按照参数列表的顺序一一替换占位符。若参数列表的字符数大于占位符个数。则将剩下的参数字符添加到字符串的结尾。
给定一个字符串A,同时给定它的长度n及参数字符数组arg,请返回替换后的字符串。保证参数个数大于等于占位符个数。保证原串由大小写英文字母组成,同时长度小于等于500。
测试样例:
“A%sC%sE”,7,[‘B’,’D’,’F’]
返回:”ABCDEF”
分析:开始看到这题,直接上手用最简单的思路,定义一个新的字符串B,当A[i]和A[I+1]等于%s时,替换,到最后如果arg字符数组没有用完,那就补充到B的后面。
看到讨论区里很多大牛使用STL里字符串封装好的函数,方便又快捷,晚上洗澡听班上的大牛也说要学会使用STL,思想是要掌握,但效率一定要提高!深受启发~
class StringFormat {
public:
string formatString(string A, int n, vector<char> arg, int m) {
// write code here
string B;
int i=0,j=0,q=0;
while(i<n)
{
if( A[i]=='%'&& i<n-1&& A[i+1]=='s' )
{
B+=arg[j++];
i+=2;
}
else
{
B+=A[i++];
}
}
while(j<m)
{
B+=arg[j++];
}
return B;
}
};
8.棋子翻转
题目描述
在4x4的棋盘上摆满了黑白棋子,黑白两色的位置和数目随机其中左上角坐标为(1,1),右下角坐标为(4,4),现在依次有一些翻转操作,要对一些给定支点坐标为中心的上下左右四个棋子的颜色进行翻转,请计算出翻转后的棋盘颜色。
给定两个数组A和f,分别为初始棋盘和翻转位置。其中翻转位置共有3个。请返回翻转后的棋盘。
测试样例:
[[0,0,1,1],[1,0,1,0],[0,1,1,0],[0,0,1,0]],[[2,2],[3,3],[4,4]]
返回:[[0,1,1,1],[0,0,1,0],[0,1,1,0],[0,0,1,0]]
分析:这题与我之前做的一个课设(马踏棋盘)挺像的,不过略简单,只要理解支点坐标的上下左右不一定都存在便可,还有就是求反的方法很多,我用的是当前值-1求绝对值便可求反了。
正好明天巩固下马踏棋盘的思想~
class Flip {
public:
vector<vector<int> > flipChess(vector<vector<int> > A, vector<vector<int> > f) {
// write code here
int i,j;
for(i=0;i<3;i++)
{
if( f[i][0]-2>=0 )
{
A[f[i][0]-2][f[i][1]-1] = abs(A[f[i][0]-2][f[i][1]-1] -1 );
}
if( f[i][1]-2>=0 )
{
A[f[i][0]-1][f[i][1]-2] = abs(A[f[i][0]-1][f[i][1]-2] -1 );
}
if( f[i][0]<4 )
{
A[f[i][0]][f[i][1]-1] = abs(A[f[i][0]][f[i][1]-1] -1 );
}
if( f[i][1]<4 )
{
A[f[i][0]-1][f[i][1]] = abs(A[f[i][0]-1][f[i][1]] -1 );
}
}
return A;
}
};
希望路过的大牛看过代码和分析之后能给小弟一些建议,感激不尽~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。