当前位置:   article > 正文

牛客网编程基础6-8_牛客网血型问题

牛客网血型问题

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;
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

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;
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

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;
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

希望路过的大牛看过代码和分析之后能给小弟一些建议,感激不尽~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/467958
推荐阅读
相关标签
  

闽ICP备14008679号