一、DNA匹配
题目描述
有一种DNA由A和T组成,长度为n,顺次连接。现有一种手段可以改变这种DNA:每一次可以交换DNA上两个核酸的位置,也可以将某个特定位置的核酸修改为另一种核酸。现有一种DNA,希望将它改造成另一种DNA,计算最少的操作次数。
输入:两行DNA
输出:第一行DNA改为第二行DNA的最少修改次数
C++实现(AC)
#include<bits/stdc++.h>
using namespace std;
class Solution {
public:
int Leasttimesofchange(string& s1, string& s2) {
if (s1.size() != s2.size())
return -1;
int len = s1.size();
if (len == 0) return 0;
int a = 0, b = 0, c, result;
for (int i = 0; i < len; ++i) { //两个序列相同的元素个数
if (s1[i] == s2[i])
++a;
}
for (int i = 0; i < len; ++i) { //除去相同元素,其中A有多少个
if (s1[i] == 'A' && s1[i] != s2[i])
++b;
}
c = len - a - b; //除去相同元素,其中T有多少个
result = min(b, c) + abs(b - c);
return result;
}
};
int main() {
Solution S;
string s1, s2;
cin >> s1 ;
cin >> s2 ;
int times = S.Leasttimesofchange(s1, s2);
cout << times << endl;
}
二、抽奖
题目描述
A和B两人抽奖。抽奖箱中有n张中奖票,m张不中奖票。A和B轮流从中抽一张,如果有人抽到中奖票就结束游戏,抽到中奖票的人胜利。抽过的奖票会被丢弃。另外,B每次抽完后,会再次抽取一张票并丢弃掉(这张中奖不算B胜利)。现在,A先抽,求A胜的概率,保留4位小数后输出。若两人最后都没抽到中奖票,算B胜利。
思路分析
没有做出来……
三、总结
本次笔试题,除了编程题,前面还有逻辑测试题和一些基础选择题,总体题量有点大,做题的时候有些许干扰。关于编程题,重在思路,不惧怕,才能静下来面对问题。