360 2020春招3月24日C++b卷编程题

题目1:输入两列字符串表示DNA序列 氨基酸只有AT两种,序列1如果和序列2不相同需要做最小变换使之相同
可以变成另一个核算,也可以和其他位置交换,交换算一次操作,求最小交换次数

#include
#include
#include
using namespace std;

class DNA
{
public:
	DNA()
	{
	}
	void in()
	{
		cin >> s1;
		cin >> s2;
		if (s1.size() != s2.size())
			in();
		
	}
	int AT()
	{
		int a = 0;
		int t = 0;
		auto it1 = s1.begin();
		auto it2 = s2.begin();
		while (it1 != s1.end())
		{
			if (*it1 != *it2)
			{
				if (*it1 == 'T')
				{
					++t;
				}
				else
				{
					++a;
				}
			}
			++it1;
			++it2;
		}
		
		return a > t ? a : t;
	}
private:
	string s1, s2;
	

};


int mains()
{
	DNA a;
	a.in();
	cout<<a.AT();

	return 0;
}

第二题
a、b两个人抽奖,箱子中n个中奖,m个不中奖,a先抽,b后抽,不放回,抽到中奖结束游戏,
每一轮a b 抽完后,b再抽一次,无论是否中奖都丢弃,如果游戏结束都未抽到奖,算b胜,求a胜的几率
输入 2 3 输出 0.6000 输入 1 3 输出0.5

using namespace std;

double in(double m, double n)
{
	//
	cout << m << "  " << n << endl;
	if (m < 1)
	{
		return 0;
	}
	
	double s1 = m / (n+m);
	if (n <= 2)
	{
		return s1;
	}
	double s2 = n / (n + m)*(n-1) / (n + m- 1 )*(n - 2) / (n + m- 2 )*in(m, n - 3);
	double s3 = n / (n + m)*(n-1) / (n + m- 1 )*(m) / (n + m - 2)*in(m - 1, n - 2);
	
	double s = s1 + s2 + s3;
	return s;
}

int main()
{
	double n, m;
	cin >> n >> m;
	cout<<in(n,m);
	return 0;
}

你可能感兴趣的:(360 2020春招3月24日C++b卷编程题)