牛客网编程基础6-8
来源:互联网 发布:手动安装windows补丁 编辑:程序博客网 时间:2024/04/20 01:09
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; }};
希望路过的大牛看过代码和分析之后能给小弟一些建议,感激不尽~
- 牛客网编程基础6-8
- 牛客网编程基础1-5
- 牛客网编程基础9-11
- 编程基础
- 编程基础
- 编程基础
- 编程基础
- 编程基础
- 编程基础
- 编程基础
- 编程基础
- 编程基础
- 编程基础
- 牛客网编程基础12,14-15
- 牛客网编程基础16,18(洪水)
- 黑马程序员之java编程基础8
- R语言基础编程技巧汇编 - 8
- C#编程基础 实验(8) (4)
- Lecture 16
- ThinkPHP 的页面静态化功能的实现(二)
- java 搭建基于springboot的ssh(spring + springmvc + hibernate)的gradle项目(添加多Module篇)
- 有史以来程序员最实用快捷键
- 1064. Complete Binary Search Tree 解析
- 牛客网编程基础6-8
- caffe之SSD算法词袋解析
- ThinkPHP 的页面静态化功能的实现(一)
- Informatica的下载安装和配置
- PHP人性化时间显示,实现多少秒前,多少分钟前,多少小时前
- PHP判断手机设备访问
- PHP强制下载文件
- iOS 应用跳转到AppStore评分 可内置跳转
- PHP删除文件夹及文件夹下的所有文件