2020年3月24日360笔试题目

本文介绍了2020年360笔试的两道题目,第一题涉及DNA序列的最少修改次数问题,通过分析得出最优策略。第二题是抽奖概率问题,分析了A获胜的概率计算,并提供了Python和C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


  做了360的笔试,感觉真的是运气很好了,这次的笔试真的算非常简单的了。废话不多说,看题目。

题目一

题目大概是,有一段DNA,包含两种字符,A和T,科学家可以通过两种方式修改这种DNA,第一种是替换DNA上两个核酸的位置。第二种是直接把字符修改为另一种字符
输入两行,第一行是原始的DNA,第二行是目标DNA,保证长度是相同的
求最少的修改次数

样例输入:
ATTTAA
TTAATT

输出:3

  这个题目看起来好像有点复杂,仔细一想其实很简单,就两个字符,不一样的时候可以交换,也可以更改。显然长度是一致的,没有改变长度的操作,所以很直接,如果可以交换直接交换,如果不能交换则修改。交换减少的不一样字符的数目为2,修改减少不一致的数目为1。
  再来看交换,如果把A换成T,肯定有一个T被换成了A,如果把已经配对的T换成了A,那么相当于没换,因为不一样的数目没变。所以肯定是两者之间的互换。但是什么时候就不能交换了呢,显然就是所有的T已经被A交换完了,或者A被T交换完了。
  如果已经有一种字符被交换完了,那么剩下的字符就只能修改了。所以统计不一样的字符数目,分开统计A不一样的时候,和T不一样的时候。交换的数目显然就是两个数中较小的数目。更改的数目就是多的数交换之后剩下的数目。所以总的修改次数,就是只管多的那个不一样的字符。
  上面的例子中,两个DNA不相同的字符的索引有0,2,3,4,5。与原串的A不一样的字符索引是0,4,5。与原串的T不一样的字符索引是2,3。显然把0,4和2,3交换之后,剩下的5进行替换即可。所以就是统计与原串中A和T不一样的字符的数目,两者多的就是总的修改次数。

python 代码
origin=input()
target=input()
ori={
   
   'A':0,'T':0}
for o,t in zip(origin,target):
    if o!=t:
        ori[o]+=1
print(max(ori['A'],ori['T']))
C++代码
int main()
{
   
   
	string origin, target;
	cin >> origin;
	cin >> target;
	int a[2] = {
   
    0,0 };
	for (int i = 0; i < origin.size(); i++)
		if (origin[i] != target[i])
			a[origin[i] == 'A'] += 1;
	cout << (a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值