第十四届蓝桥杯省赛C++组真题及题解

A.日期统计

第十四届蓝桥杯省赛C++组真题及题解_第1张图片
A.答案

 这是一道纯暴力能解决的问题,而且是一道填空题,只需判断每个日期中有无这样的数即可。
代码如下:

#include 
 
using namespace std;
 
int a[110] = {0, 5, 6, 8, 6, 9, 1, 6, 1, 2, 4, 9, 1, 9, 8, 2, 3, 6, 4, 7, 7, 5, 9, 5, 0, 3, 8, 7, 5, 8, 1, 5, 8, 6, 1, 8, 3, 0, 3, 7, 9, 2, 7, 0, 5, 8, 8, 5, 7, 0, 9, 9, 1, 9, 4, 4, 6, 8, 6, 3, 3, 8, 5, 1, 6, 3, 4, 6, 7, 0, 7, 8, 2, 7, 6, 8, 9, 5, 6, 5, 6, 1, 4, 0, 1, 0, 0, 9, 4, 8, 0, 9, 1, 2, 8, 5, 0, 2, 5, 3, 3};
int month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int day[10] = {0, 2, 0, 2, 3};
int ans;
 
int main(){
	
	for (int i = 1; i <= 12; i++)
	{
		for (int j = 1; j <= month[i]; j++)
		{
			day[5] = i / 10;
			day[6] = i % 10;
			day[7] = j / 10;
			day[8] = j % 10;
			int k = 1;
			for (int t = 1; t <= 100; t++)
			{
				if (a[t] == day[k]) k++;
				if (k == 9)
				{
					ans++;
					break;
				}
			}
		}
	}
	
	cout << ans << endl;
	
	return 0;
}

 答案为:235

B.01串的熵

第十四届蓝桥杯省赛C++组真题及题解_第2张图片

B.答案

这个题是一个填空题,而且题目给了一个前提为0出现的次数比1少,这个很关键,代表着这个函数为单调递增状态的,而且这个H(S)推算也不难

然后可以从1遍历到长度的一半来求解,也可以根据二分来求解,我就附一个二分的代码了

#include 
#include 

using namespace std;

double res = 11625907.5798;
double len = 23333333;

bool check(double mid)
{
	double t = -mid * mid / len * log2(mid / len) - (len - mid) * (len - mid) / len * log2((len - mid) / len);
	if (t - res <= 1e-4) return 1;
	else return 0;
}

int main(){
	
	int l = 1, r = len / 2;
	while (l < r)
	{
		int mid = l + r + 1>> 1;
		if (check(double(mid))) l = mid;
		else r = mid - 1;
	}
	
	cout << l << endl;
	
	return 0;
} 

答案为:11027421

C.冶炼金属

第十四届蓝桥杯省赛C++组真题及题解_第3张图片

C.答案

假设需要k个原材料才可以生产出一个产物,就是说需要k个O才能得到一个X
如果k太大了,就会导致不够,k太小的就会导致生产变多,所以要对于一个炉子来说,可能的情况就是往这两个的极限逼近
先解释maxx,k最多为a/b,如果k再大了就不够了,然后对每一个炉子的最大值取min
再解释minn,如果k太小的话,就会生产出b+1个,所以就算一下产出b+1个时的k值,然后对这个值+1使得他不足以生成b+1个,又是逼近b+1个。

所以,maxx = min(maxx, a / b), minn = max(minn, a / (b+1) + 1), 代码如下:

#include 

using namespace std;

int minn, maxx;

int main(){
	
	int n;
	cin >> n;
	int a, b;
	cin >> a >> b;
	minn = a / (b + 1) + 1;
	maxx = a / b;
	for (int i = 2; i <= n; i++)
	{

你可能感兴趣的:(蓝桥杯,c++,职场和发展)