2024蓝桥杯B组初赛--备战蓝桥杯版h

第一题

0握手问题 - 蓝桥云课

这个题目经典的数学题

先算所有人都握手且不重复---》第一个人和n-1人,第二个和n-2个人,···,第n个和0个人--》也就是求n-1+n-2+...+1,一个循环就得出来了--》在计算7个人互相握手次数--》6+5+4+3+2+1--》然后用所有人减去七个人就行

cpp 复制代码
#include<iostream>
using namespace std;
const int N=100010;
int main()
{
	int sum=0;
	
	for(int i=49;i>0;i--)
	{
		sum+=i;
	}
	int cnt=0;
	for(int i=6;i>0;i--)
	{
		cnt+=i;
	}
	cout<<sum-cnt<<endl;
	return 0;
} 

第三题

0好数 - 蓝桥云课

一个个枚举然后判断(这个没有什么技术含量)--》把每个数拆成一位一位的放进数组,然后遍历进行判断

cpp 复制代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=10000010;
int n;
int a[N];
int k=0;
bool check(int x)
{
	k=0;
	while(x)
	{
		a[k++]=x%10;
		x/=10;
	}
	for(int i=0;i<k;i++)
	{
		if(i%2==0)
		{
			if(a[i]%2==0)return false;
		}
		else 
		{
			if(a[i]%2!=0)return false;
		}
	}
	return true;
}

int main()
{
	cin>>n;
	int cnt=0;
	for(int i=1;i<=n;i++)
	{
		if(check(i))
		{
			cnt++;
		}
	}
	cout<<cnt<<endl;
	return 0;
} 

第四题(不满分版)

0R 格式 - 蓝桥云课

这个要用高精度(学了全忘了,而且太麻烦了,我就用了round函数拿了一点点分♥)

cpp 复制代码
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n;
double d;

int main()
{
	cin>>n>>d;
	for(int i=1;i<=n;i++)
	{
		d=d*2;
	}
	cout<<round(d)<<endl;
	return 0;
} 

第五题(不满分暴力版)

0宝石组合 - 蓝桥云课

依旧是暴力dfs枚举(从n个里面找3个)--》组合枚举(超时tle又和你见面了)

看他这个公式,牵扯到最小公倍数和最大公因数的化简以及求解

看见公式先化简一下吧

cpp 复制代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=100010;
ll ans=-1;
int n;
int a[N];
int path[4];
int best[4];
bool st[N];

int gcd(int a,int b)
{
	while(a%b!=0)
	{
		int c=a%b;
		a=b;
		b=c;
	}
	return b;
}

ll value()
{
	int x=gcd(path[1],path[2]);
	int y=gcd(x,path[3]);
	return y;
}
void dfs(int x,int start)
{
	if(x==4)
	{
		ll sum=value();
		if(sum>ans)
		{
			ans=sum;
			for(int i=1;i<=3;i++)
			{
				best[i]=path[i];
			}
		}
		else if(sum==ans)
		{
			bool flag=false;
			if(path[1]<best[1])flag=true;
			else if(path[1]==best[1]&&path[2]<best[2])flag=true;
			else if(path[1]==best[1]&&path[2]==best[2]&&path[3]<best[3])flag=true;
			if(flag)
			{
				for(int i=1;i<=3;i++)
         		{
				    best[i]=path[i];
			    }
			}
		}
		return;
	}
	if(x>4)return;
	for(int i=start;i<=n;i++)
	{
		if(!st[i])
		{
			st[i]=true;
			path[x]=a[i];
			dfs(x+1,i+1);
			st[i]=false;
		}
	}
}

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	sort(a+1,a+n+1);
	dfs(1,1);
	for(int i=1;i<=3;i++)
	{
		cout<<best[i]<<' ';
	}
	return 0;
}
  

第八题(看不懂题目版)

其实是不想看题,这个题目让人心烦

第七题

0拔河 - 蓝桥云课

其实就是找两个连续的队伍而且不重合--》使得力量和之差最小--》现在看来的话要求一段连续的之和,也就是用前缀和嘛🤭(每个队伍的人数不是确定的是随机的)所以我们要先计算出长度不同连续区间的和,然后进行排序--》找到力量和差最小而且不重叠的两个连续队伍

cpp 复制代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=1010;
int n;
ll a[N];
struct node{
	int l,r;
	ll sum;
}b[N*N/2];

bool cmp(node a,node b)
{
	return a.sum<b.sum; 
}
ll total[N];

int main()
{
	cin>>n;
	int cnt=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		total[i]=total[i-1]+a[i];
	}
	for(int l=1;l<=n;l++)
	{
		for(int r=l;r<=n;r++)
		{
			b[cnt].l=l;
			b[cnt].r=r;
			b[cnt].sum=total[r]-total[l-1];
			cnt++;
		}
	}
	sort(b,b+cnt,cmp);
	
	ll ans=1e18;
	
	for(int i=0;i<cnt;i++)
	{
		if(b[i].r<b[i+1].l||b[i+1].r<b[i].l)
		{
			ans=min(ans,abs(b[i+1].sum-b[i].sum));
		}
	}
	cout<<ans<<endl;
	return 0;
} 
相关推荐
小年糕是糕手3 小时前
【35天从0开始备战蓝桥杯 -- 刷题包】
c语言·jvm·数据结构·c++·算法·蓝桥杯
2301_800895104 小时前
2023蓝桥杯B组初赛--备战蓝桥杯版h
职场和发展·蓝桥杯
小年糕是糕手4 小时前
【35天从0开始备战蓝桥杯 -- 补充包】
开发语言·前端·数据结构·数据库·c++·算法·蓝桥杯
晓晓hh21 小时前
蓝桥杯——19
职场和发展·蓝桥杯
仰泳的熊猫1 天前
题目2281:蓝桥杯2018年第九届真题-次数差
数据结构·c++·算法·蓝桥杯
故事和你911 天前
sdut-程序设计基础Ⅰ-期末测试(重现)
大数据·开发语言·数据结构·c++·算法·蓝桥杯·图论
仰泳的熊猫1 天前
题目2279:蓝桥杯2018年第九届真题-日志统计
数据结构·c++·算法·蓝桥杯
计算机安禾1 天前
【C语言程序设计】第27篇:递归函数原理与实例分析
c语言·开发语言·数据结构·c++·算法·蓝桥杯·visual studio
無限進步D1 天前
C++ 万能头
开发语言·c++·算法·蓝桥杯·竞赛·万能头