蓝桥杯真题2023大学B组日期统计+01串的熵+冶炼金属+飞机降落C++

题目A日期统计题目链接: 

https://www.lanqiao.cn/problems/3492/learning/?page=1&first_category_id=1&name=%E6%97%A5%E6%9C%9F%E7%BB%9F%E8%AE%A1

题目:

 题目思路:

步骤一:创建一个数组a[]用来存放100个数据

步骤二:创建一个月份的数组,表示12个月份的天数

步骤三:定义一个存放结果的数组answer[]用来存放结果,其中i/10代表前缀0或者是月份10以上的1,i%10则代表月份后一位数,j/10,j%10同理

例如:i = 12
i/10 = 1;  i%10 = 2;
i = 9
i/10 = 0;  i%10 = 9

完整代码:

//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
#include <iostream>
#include <bits/stdc++.h> 
using namespace std;
int a[] = { 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 monthes[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
	int ans = 0;
	for(int i = 1;i <= 12;i++)
	{
		for(int j = 1;j <= monthes[i];j++)
		{
			int answer[] = {2,0,2,3,i/10,i%10,j/10,j%10};
			int t = 0;
			for(int k = 0;k < 100;k++)
			{
				if(a[k] == answer[t])
				{
					t++;
					if(t==8)
					{
						ans++;
					}
				}
			}
		}
	}
	cout<<ans;
	return 0;
}

题目B01串的熵题目链接:

https://www.lanqiao.cn/problems/3498/learning/?page=1&first_category_id=1&name=01%E4%B8%B2%E7%9A%84%E7%86%B5

题目:

 题目思路:

步骤一:设置两个变量

//h(s) = 11625907.5798 ; n= 2333 3333
int n = 23333333;
double h = 11625907.5798;

步骤二:定义一个for循环,定义一个值t表示结果,这个结果与原来的结果误差小于0.0001时就可以得到正确结果

完整代码:

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
//h(s) = 11625907.5798 ; n= 2333 3333
int n = 23333333;
double h = 11625907.5798;
int main()
{
	for(int i = 0;i < n/2;i++)
	{
		double t = 0;
		t -= 1.0*i*i/n * log2(1.0*i/n);
		t -= 1.0*(n-i)*(n-i)/n * log2(1.0*(n-i)/n);
		if(abs(t-h)<0.0001)
		{
			cout<<i;
			break;
		}
	}
} 

 题目C冶炼金属题目链接:

https://www.lanqiao.cn/problems/3510/learning/?isWithAnswer=true&page=1&first_category_id=1&name=%E5%86%B6%E7%82%BC%E9%87%91%E5%B1%9E

 题目:

 题目思路:

75 3    --    75/3=25    75/(3+1)=18;    18+1=19;
53 2    --    53/2=26    53/(2+1)=17;    17+1=18;
59 2    --    59/2=29    59/(2+1)=19;    19+1=20;
可以看出最大值就是25,26,29的最小值
最小值是19,18,20的最大值

完整代码:

#include <bits/stdc++.h>
using namespace std;
int n;
int minx = -999999999,maxx = 999999999;
int main()
{
	cin>>n;
	while(n--)
	{
		int a,b;
		cin>>a>>b;
		minx = max(minx,a/(b+1) + 1);
		maxx = min(maxx,a/b);
	}
	cout<<minx<<" "<<maxx;
	return 0;
}

题目D飞机降落题目链接:

https://www.lanqiao.cn/problems/3511/learning/?page=1&first_category_id=1&name=%E9%A3%9E%E6%9C%BA%E9%99%8D%E8%90%BD

题目:

 

 

 题目思路:

暴力搜索

bool dfs(int down_num, int last_time)
int down_num代表下降的飞机数目
int last_time代表上一架飞机降落的时间点--表明这辆飞机降落的时间满足Node[i].t + Node[i].d >= last_time

完整代码:

#include<bits/stdc++.h>
using namespace std;
struct node {
	int t, d, l;
}Node[11];
int t, n;
bool via[11]; // 标记第 i 架飞机是否降落 
/*
当前一共降落多少架飞机。
二是上一架飞机降落完毕的时间点。
对于上一架飞机,开始降落的时间点能早就早,但是不能比它自己的 “上一架” 的降落完毕的时间早
*/
bool dfs(int down_num, int last_time) {
	if(down_num == n)	return 1;
	for(int i = 1; i <= n; i++) 
	{
		if(!via[i] && Node[i].t + Node[i].d >= last_time) 
		{
			via[i] = 1;
			if(dfs(down_num + 1, max(last_time, Node[i].t) + Node[i].l))
				return 1;
			via[i] = 0;
		}
	}
	return 0;
}
int main() {
	cin >> t;
	while(t--) {
		memset(via, 0, sizeof(via)); // 每次记得清空
		cin >> n;
		for(int i = 1; i <= n; i++) {
			cin>>Node[i].t>>Node[i].d>>Node[i].l;
		}
		if(dfs(0, 0))
			cout << "YES"<<endl;
		else
			cout << "NO"<<endl;
	}
	return 0;
}

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值